Starten Sie Nginx beim Start

11

Ich konnte Nginx und Passenger installieren und ausführen, aber ich kann Nginx nicht immer dann starten, wenn ich meinen Server neu starte. Um den Nginx-Prozess zu starten, tippe ich einfach sudo / opt / nginx / sbin / nginx ein . Nach meinem Verständnis wird alles ausgeführt, was ich mit ubuntu hardy in /etc/init.d eingefügt habe. Kennt jemand den Befehl, der diesen Befehlszeilenaufruf nachahmt?

sudo / opt / nginx / sbin / nginx


quelle
Wenn Sie nginx über apt-get install nginx installieren, startet es "automatisch" beim Booten (startet sich aber zunächst nicht automatisch, ungerade ...)
rogerdpack

Antworten:

10

Vielen Dank für die Info, wenn jemand Schritt für Schritt Anweisungen möchte. Gehen Sie zu /etc/init.d und führen Sie es aus. Fügen Siesudo nano nginx-passenger.sh dann den folgenden Code ein:

#!/bin/bash
# this script starts the nginx process attached to passenger
sudo /opt/nginx/sbin/nginx

speichern und schließen. Machen Sie die Datei durch Eingabe ausführbar sudo chmod +x /etc/init.d/nginx-passenger.sh. Sie können testen, ob das Skript funktioniert, indem Sie dies eingeben. Dadurch sudo /etc/init.d/nginx-passenger.shwird der gesamte Code im Skript ausgeführt. Stellen Sie sicher, dass nginx gestartet wird, bevor Sie fortfahren.

Führen Sie dann aus, sudo update-rc.d nginx-passenger.sh defaultswährend Sie sich noch im Verzeichnis /etc/init.d befinden. Sobald dies alles vorhanden ist, starten Sie Ihren Server neu und ngnix sollte jetzt beim Start automatisch erzeugt werden

Paulo Freitas
quelle
Danke für die direkten Anweisungen. Dafür ist StackExchange da.
Ryan
9

/etc/init.d ist nur der Speicherort für die Startskripte. Aber ein Skript dort zu haben, macht nichts automatisch.

Das Init-System verwendet die symbolischen Links in den Verzeichnissen /etc/rc#.d zu den Skripten im Ordner /etc/init.d. Der Name der symbolischen Verknüpfung muss mit einem S beginnen, um das Skript mit der Startoption auszuführen, und mit K, um die Stoppoption auszuführen, gefolgt von einer Prioritätsnummer und dem Namen des Skripts.

Weitere Informationen
finden
Sie im Folgenden unter /etc/init.d/README /etc/rc1.d/README
/etc/rc2.d/README

Alternativ können Sie Ihren Befehl, den Sie ausführen möchten, in das Skript /etc/rc.local einfügen, das ausgeführt wird, nachdem das System gestartet und alle Skripts im Ordner /etc/rc2.d/ ausgeführt wurden.

3dinfluence
quelle
1
Übrigens, die Datei /etc/init.d/README weist Sie an, den Befehl update-rc.d zu verwenden, um symbolische Links in /etc/rc?.d zu erstellen, sodass Sie anhand der obigen Antwort nur wissen, was dieser Befehl tut. Sie können man update-rc.d ausführen, um weitere Informationen zum Befehl update-rc.d zu erhalten.
3dinfluence
Es sieht so aus, als ob die Manpage update-rc.d vorschlägt, dass Sie sysv-rc-conf oder bum verwenden sollten, um die Init-Skripte zu verwalten, die auf verschiedenen Ausführungsebenen ausgeführt werden. Ich schätze, ich werde einen Fehler in der /etc/init.d/README
3dinfluence
Sieht so aus, als ob es bereits in der nächsten Ubuntu-Version korrigiert wurde. Die Manpage update-rc.d schlägt nicht mehr sysv-rc-conf oder bum vor.
3dinfluence
5

So starten Sie nginx beim Booten: sudo systemctl enable nginx (startet es nicht sofort)

So starten Sie nginx: sudo system start nginx

Ben Butterworth
quelle
Ah, die moderne Antwort (also ab 2019 modern). Willkommen auf der Website ButterHub :)
Kubanczyk
Danke @kubanczyk :)
Ben Butterworth
2

Ich gehe davon aus, dass Sie Nginx installiert haben

Wenn Nginx ausgeführt wird, beenden Sie den Vorgang mit:

  • sudo killcat /usr/local/nginx/logs/nginx.pid

Init-Skript

Das unten gezeigte Skript stammt aus einer Ubuntu 10.04-Installation und wurde angepasst, um unsere benutzerdefinierte Installation von nginx zu berücksichtigen. Bitte erstellen Sie das Skript:

sudo nano /etc/init.d/nginx

Platzieren Sie in der leeren Datei Folgendes:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Ausführen Da die Init-Datei ein Shell-Skript ist, muss sie über ausführbare Berechtigungen verfügen.

Wir setzen sie so:

sudo chmod +x /etc/init.d/nginx

update-rc Nachdem wir das Basisskript vorbereitet haben, müssen wir es zu den Standardausführungsstufen hinzufügen:

sudo /usr/sbin/update-rc.d -f nginx defaults 

Die Ausgabe sieht folgendermaßen aus:

sudo /usr/sbin/update-rc.d -f nginx defaults
 Adding system startup for /etc/init.d/nginx ...
   /etc/rc0.d/K20nginx -> ../init.d/nginx
   /etc/rc1.d/K20nginx -> ../init.d/nginx
   /etc/rc6.d/K20nginx -> ../init.d/nginx
   /etc/rc2.d/S20nginx -> ../init.d/nginx
   /etc/rc3.d/S20nginx -> ../init.d/nginx
   /etc/rc4.d/S20nginx -> ../init.d/nginx
   /etc/rc5.d/S20nginx -> ../init.d/nginx

Jetzt können wir nginx wie bei jedem anderen Dienst starten, stoppen und neu starten:

sudo /etc/init.d/nginx start
...
sudo /etc/init.d/nginx stop
...
sudo /etc/init.d/nginx restart

Das Skript wird auch bei einem Neustart aufgerufen, sodass nginx automatisch gestartet wird.

Pankaj Sonawane
quelle
1
Ich fand mit Ubuntu 17.10, dass ich sudo systemctl enable nginxaus dem /etc/init.dVerzeichnis heraus musste.
Erik