Contexte:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
J'ai construit nginx, et j'aimerais utiliser upstart pour le démarrer:
Script de démarrage nginx à partir du site:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
J'obtiens un "travail inconnu" lorsque j'essaie d'utiliser initctl pour l'exécuter, ce que je viens d'apprendre apparemment signifie qu'il y a une erreur, (qu'est-ce qui ne va pas avec "Error" pour décrire les erreurs?)
Quelqu'un peut me diriger dans la bonne direction ? J'ai lu la documentation, telle qu'elle est, et cela semble un peu rare pour un remplacement d'initialisation SysV ... mais quoi que ce soit, il suffit d'ajouter ce travail à la liste, de l'exécuter et de continuer avec ce qui reste de ma vie. .. Des conseils?
EDIT: initctl version init (upstart 0.6.5)
ubuntu
upstart
ubuntu-10.04
chiggsy
la source
la source
Réponses:
Vous ne pouvez pas avoir plusieurs
stop on
directives dans une description de tâche upstart pour Upstart> = 0.5.Et ce
console owner
n'est probablement pas ce que vous voulez (cela fait de nginx le propriétaire de la console système).Essayer:
la source
man 5 init
daemon off
option est pour le développement uniquement.Je me suis retrouvé ici plus d'une fois, alors j'ai pensé fournir une réponse mise à jour basée sur ma propre expérience après avoir utilisé les réponses ici. Merci particulièrement à @danorton et @orj pour leurs réponses.
Ce script a été testé sur Upstart 1.5 exécuté sur Ubuntu 12.04 avec Nginx 1.0.11 et Passenger 3.0.11. Si vous n'utilisez pas Passenger, vous devrez peut-être jouer avec la
post-stop
ligne. Reportez-vous au livre de recettes Upstart.Dans un espace vide,
/etc/init/nginx.conf
ajoutez les lignes suivantes (vous pouvez supprimer les commentaires si vous le souhaitez):J'ai pris le script Upstart du wiki Nginx et l'ai modifié car un certain nombre de lignes ne sont pas nécessaires, provoquent de la confusion ou ne fonctionnent pas.
Vous devrez peut-être modifier
env DAEMON
etenv PID
lignes en fonction de l'endroit où vous avez installé nginx et écrivez le PID. Le PID peut être configuré dans nginx.J'ai essayé toutes les formes de
expect
.expect fork
Semble seulement fonctionner. Avec Passenger, nginx crée 61 fourches. Upstart nécessite 0, 1 ou 2. Comme d'autres l'ont laissé entendre, Upstart suivra le mauvais PID. J'ai également supprimérespawn
car il ne fait probablement rien pour la même raison. Certains scripts supplémentaires avant / après démarrage peuvent résoudre ce problème en saisissant le vrai PID. Cependant, j'utilise monit pour gérer les redémarrages, donc je n'en ai pas besoin.Ne pas utiliser
daemon off
. C'est uniquement pour le développement. Voir http://wiki.nginx.org/CoreModule#daemonRéférences:
la source
daemon off;
sorte que le processus arriviste montres correct / PID sans qu'il soit nécessaire pour leexpect fork
ou lespost-stop
directives. La section wiki décrivant l'option démon indique également "Vous pouvez utiliser le démon en toute sécurité en mode production avec runit / daemontools, mais vous ne pouvez pas faire une mise à niveau gracieuse.", Qui je suppose fait référence à la mise à niveau vers un nouveau binaire sur le fonction de vol .Tu ne peux pas. Du moins pas correctement, de toute façon.
Nginx ne génère pas son démon de l'une des deux manières requises par upstart, soit via «expect fork» ou «expect daemon», donc upstart ne peut pas suivre le processus maître nginx. Il y a des hacks, mais ils ont leurs propres problèmes.
Si vous êtes d'accord avec le fait que upstart ne peut pas suivre le processus maître et le tuer à l'arrêt, cela fonctionnera:
la source
expect daemon
provoque un blocage pour moi (Ubuntu 12.04, Upstart 1.5, Nginx).expect fork
a fonctionné bien que comme l'indique @danorton, Upstart suivra le mauvais PID. Je ne pouvais pas non plus faire réapparaître pour travailler (voir ma réponse complète).Il y a un exemple de fichier de configuration Upstart dans le Wiki NGINX .
Vous devrez peut-être ajuster le chemin vers le binaire nginx dans le fichier de configuration.
Ce fichier de configuration fonctionne bien pour moi avec Ubuntu 10.04 et nginx 1.0.5.
J'ai également installé un
nginx
lien symbolique en/etc/init.d
pointant sur/lib/init/upstart-job
afin que je puisse utiliser laservice
commande standard pour démarrer et arrêternginx
.Remarque: Si vous installez Phusion Passenger avec NGINX, vous devrez peut-être ajouter la strophe suivante au script de configuration Upstart:
J'ai trouvé cela nécessaire sur ma configuration Ubuntu. Sinon, quand j'ai émis
initctl stop nginx
ou queservice nginx stop
nginx ne s'est pas réellement arrêté. J'ai également remarqué que Upstart pensait que le processus nginx avait un PID qui était en fait le PID de l'un des processus passagers. Il est donc clair que NGINX / Passenger confond un peu Upstart.la source
stop: Job failed while stopping
faire. As-tu vu ça?J'utilise:
L'arrêt
runlevel [!...]
semble être plus standard. C'est ce que font les scripts stock ssh / samba. Vous devez également ajouter lerespawn
bit afin qu'il redémarre s'il meurt. Je ne sais pas non plus pourquoi vous voulezconsole output
que cela envoie simplement la sortie de la console à stdout. Le comportement par défaut consiste à envoyer simplement la sortie de la console à l'enregistreur.Vous pouvez voir tous les documents de la strophe sur le wiki Upstart
la source
Voir http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu pour plus.
la source
Étrangement, aucune des réponses ici ne fonctionne réellement pleinement car elles laissent le début dans un état d'arrêt / d'arrêt, ce qui empêche un autre démarrage de fonctionner. Cela signifie que cela
restart nginx
échoue.Le bogue avec upstart est bien documenté à https://bugs.launchpad.net/upstart/+bug/406397 et je suis étonné que l'auteur de upstart ne semble pas assez se soucier de le corriger. La seule solution que j'ai vue qui fonctionne est la suivante (volée dans le même rapport de bogue):
L'avantage de l'écrire comme ceci est que même la réapparition fonctionne. L'inconvénient est que c'est moche et un hack méchant.
la source