Lancer Nginx au démarrage

11

J'ai pu installer et exécuter nginx et passager, mais je ne peux pas faire monter nginx chaque fois que je redémarre mon serveur. Pour démarrer le processus nginx, il suffit de taper sudo / opt / nginx / sbin / nginx . D'après ma compréhension, tout ce que j'ai mis dans /etc/init.d avec ubuntu hardy sera exécuté. Quelqu'un connaît-il la commande qui imitera cet appel de ligne de commande?

sudo / opt / nginx / sbin / nginx


la source
si vous installez nginx via apt-get install nginx, il démarre "automatiquement" au démarrage (mais ne démarre pas automatiquement lui-même initialement, bizarre ...)
rogerdpack

Réponses:

10

Merci pour l'info, si quelqu'un veut des instructions pas à pas. Accédez à /etc/init.d et exécutez sudo nano nginx-passenger.sh, puis collez ce code:

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

sauvegarder et quitter. Rendez le fichier exécutable en tapant sudo chmod +x /etc/init.d/nginx-passenger.sh. Vous pouvez tester pour voir si le script fonctionne en tapant sudo /etc/init.d/nginx-passenger.shcela exécutera tout le code du script. Vérifiez qu'il lance nginx avant de continuer.

Exécutez ensuite sudo update-rc.d nginx-passenger.sh defaultstout en restant dans le répertoire /etc/init.d. Une fois que tout cela est en place, redémarrez votre serveur et ngnix devrait maintenant apparaître automatiquement au démarrage

Paulo Freitas
la source
Merci pour les instructions directes. C'est à cela que sert StackExchange.
Ryan
9

/etc/init.d est juste l'emplacement où vivre les scripts de démarrage. Mais avoir un script là-bas ne fait rien automatiquement.

Le système init utilise les liens symboliques des répertoires /etc/rc#.d vers les scripts du dossier /etc/init.d. Le nom du lien symbolique doit commencer par un S pour exécuter le script avec l'option de démarrage et K pour exécuter l'option d'arrêt suivi d'un numéro de priorité, puis du nom du script.

Voir ce qui suit pour plus d'informations
/etc/init.d/README
/etc/rc1.d/README
/etc/rc2.d/README

Alternativement, vous pouvez placer votre commande que vous souhaitez exécuter dans le script /etc/rc.local qui est exécuté après le démarrage du système et termine l'exécution de tous les scripts dans le dossier /etc/rc2.d/.

3dinfluence
la source
1
Btw le fichier /etc/init.d/README vous demande d'utiliser la commande update-rc.d pour créer des liens symboliques dans le /etc/rc?.d afin que la réponse ci-dessus vous permette de savoir ce que fait cette commande. Et vous pouvez exécuter man update-rc.d pour plus d'informations sur la commande update-rc.d.
3dinfluence
heh ressemble à la page de manuel de la commande update-rc.d qui suggère que vous devez utiliser sysv-rc-conf ou bum pour gérer les scripts d'initialisation en cours d'exécution à différents niveaux d'exécution. Je suppose que je vais déposer un bug sur le /etc/init.d/README
3dinfluence
Il semble que cela ait déjà été corrigé dans la prochaine version d'Ubuntu. La page de manuel update-rc.d ne suggère plus sysv-rc-conf ou bum.
3dinfluence
5

Pour démarrer nginx au démarrage: sudo systemctl enable nginx (ne le démarre pas immédiatement)

Pour démarrer nginx: sudo system start nginx

Ben B
la source
Ah, la réponse moderne (moderne à partir de 2019, c'est-à-dire). Bienvenue sur le site ButterHub :)
kubanczyk
Merci @kubanczyk :)
Ben B
2

Je suppose que vous avez installé nginx

Si vous avez nginx en cours d'exécution, arrêtez le processus en utilisant:

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

Script d'initialisation

Le script ci-dessous provient d'une installation d'Ubuntu 10.04 et a été adapté pour prendre en compte notre installation personnalisée de nginx. Veuillez créer le script:

sudo nano /etc/init.d/nginx

À l'intérieur du fichier vierge, placez ce qui suit:

#! /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

Exécuter Comme le fichier init est un script shell, il doit disposer d'autorisations exécutables.

Nous les définissons comme suit:

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

update-rc Maintenant que nous avons préparé le script de base, nous devons l'ajouter aux niveaux d'exécution par défaut:

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

La sortie sera similaire à ceci:

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

Maintenant, nous pouvons démarrer, arrêter et redémarrer nginx comme avec tout autre service:

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

Le script sera également appelé lors d'un redémarrage afin que nginx démarre automatiquement.

Pankaj Sonawane
la source
1
J'ai trouvé avec ubuntu 17.10 que je devais le faire sudo systemctl enable nginxdepuis l'intérieur du /etc/init.drépertoire.
Erik