web-dev-qa-db-fra.com

Comment passer de init.d à upstart pour nginx

J'ai un script init.d pour nginx qui fonctionne normalement bien. Cependant, après un redémarrage, cela ne fonctionne pas correctement et le processus de travail mourrait, ne laissant que le processus principal.

nginx a compilé quelques éléments mongodb (nginx-gridfs) et doit commencer après mongodb, qui est démarré par upstart.

C'est tout ce que j'ai été capable de comprendre après un dépannage. Je crois que je dois changer plus de nginx pour relancer et le rendre dépendant de mongo. Comment puis je faire ça?

3
user146668

Puisque nginx-gridfs se connecte à mongodb, le serveur de base de données devrait déjà être en cours d'exécution et prêt. Cela posait un problème. J'ai d'abord enlevé le script /etc/init.d/nginx en utilisant 'update-rc.d remove nginx' Ensuite, j'ai créé un script 'upstart' dans /etc/init/nginx.conf:

# nginx

description "nginx http daemon"

#start on mongodb  
start on (local-filesystems
    and net-device-up IFACE=lo
    and started mongodb) 
stop on stopped mongodb

env DAEMON=/usr/local/nginx/sbin/nginx 
env PID=/usr/local/nginx/logs/nginx.pid

expect fork 
respawn 
respawn limit 10 5

pre-start script
        $DAEMON -t
        if [ $? -ne 0 ]
                then exit $?
        fi
        # Add a sleep of 10 sec. to allow mongodb to finish starting up
        sleep 10 
end script

exec $DAEMON

Cela a résolu le problème pour moi.

2
user146668

Vous ne l’avez probablement pas configuré correctement. Utilisez update-rc.d <yourscript> start [startorder] 2 3 4 5 . stop [end order] 0 1 6 . pour créer les liens au niveau de l’exécution.

Si votre script est correctement exécuté, il accepte les commandes start et stop, vérifiez que toutes les dépendances sont démarrées avant votre script, normalement 40 est sûr pour ordre de démarrage, et que tous les services cela dépend de la fin de votre script avant cela, 20 est probablement suffisant pour endorder.

Pour mieux savoir comment faire un bon script, jetez un coup d'œil à ceux de votre /etc/init.d

0
perdigueiro