Hintergrund:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
Ich habe Nginx erstellt und möchte es mit upstart starten:
Nginx-Upstart-Skript von der 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
Ich erhalte einen "unbekannten Job", wenn ich versuche, ihn mit initctl auszuführen. Was ich gerade erfahren habe, bedeutet anscheinend, dass ein Fehler vorliegt (was ist falsch an "Fehler", um Fehler zu beschreiben?)
Kann mich jemand in die richtige Richtung weisen? Ich habe die Dokumentation so wie sie ist gelesen und sie scheint für einen SysV-Init-Ersatz etwas spärlich zu sein ... aber was auch immer, um diesen Job zur Liste hinzuzufügen, auszuführen und mit den Überresten meines Lebens fortzufahren. .. Irgendwelche Tipps?
BEARBEITEN: initctl version init (upstart 0.6.5)
ubuntu
upstart
ubuntu-10.04
kichernd
quelle
quelle
Antworten:
Sie können nicht mehrere
stop on
Anweisungen in einer Upstart-Jobbeschreibung für Upstart> = 0.5 haben.Und
console owner
ist wahrscheinlich nicht das, was Sie wollen (dies macht nginx zum Besitzer der Systemkonsole).Versuchen:
quelle
man 5 init
daemon off
Option ist nur für die Entwicklung.Ich bin mehr als einmal hier gelandet und dachte, ich würde eine aktualisierte Antwort basierend auf meinen eigenen Erfahrungen geben, nachdem ich die Antworten hier verwendet habe. Vielen Dank insbesondere an @danorton und @orj für ihre Antworten.
Dieses Skript wurde unter Upstart 1.5 unter Ubuntu 12.04 mit Nginx 1.0.11 und Passenger 3.0.11 getestet. Wenn Sie Passenger nicht verwenden, müssen Sie möglicherweise mit der
post-stop
Linie herumspielen. Weitere Informationen finden Sie im Upstart-Kochbuch.Fügen
/etc/init/nginx.conf
Sie in einem leeren Feld die folgenden Zeilen hinzu (Sie können die Kommentare entfernen, wenn Sie möchten):Ich habe das Upstart-Skript aus dem Nginx-Wiki genommen und es optimiert, da einige Zeilen nicht benötigt werden, Verwirrung stiften oder nicht funktionieren.
Je nachdem, wo Sie nginx installiert haben und die PID schreiben, müssen Sie möglicherweise Änderungen
env DAEMON
undenv PID
Zeilen vornehmen. Die PID kann in Nginx konfiguriert werden.Ich habe alle Formen von ausprobiert
expect
. Nurexpect fork
scheint zu funktionieren. Mit Passenger erstellt nginx 61 Gabeln. Upstart erfordert 0, 1 oder 2. Wie andere angedeutet haben, verfolgt Upstart die falsche PID. Ich habe auch entfernt,respawn
da es wahrscheinlich aus dem gleichen Grund nichts tut. Einige zusätzliche Skripte vor / nach dem Start können dies möglicherweise beheben, indem sie die tatsächliche PID abrufen. Ich verwende jedoch monit, um Neustarts durchzuführen, brauche es also nicht.Nicht verwenden
daemon off
. Dies ist nur für die Entwicklung. Siehe http://wiki.nginx.org/CoreModule#daemonVerweise:
quelle
daemon off;
so dass Emporkömmling den richtigen Prozess / PID ohne die Notwendigkeit , dass die Uhrenexpect fork
oderpost-stop
Richtlinien. Im Wiki-Abschnitt, in dem die Daemon-Option beschrieben wird, heißt es außerdem: "Sie können Daemon im Produktionsmodus mit runit / daemontools sicher ausschalten, jedoch kein ordnungsgemäßes Upgrade durchführen." Ich gehe davon aus, dass es sich um ein Upgrade auf eine neue Binärdatei auf dem Computer handelt Fliegenfunktion .Das kannst du nicht. Zumindest nicht richtig.
Nginx erzeugt seinen Daemon nicht auf eine der beiden Arten, die ein Upstart erfordert, entweder über "Expect Fork" oder "Expect Daemon", sodass Upstart den Master-Nginx-Prozess nicht verfolgen kann. Es gibt einige Hacks, aber sie haben ihre eigenen Probleme.
Wenn Sie mit der Tatsache einverstanden sind, dass Upstart den Master-Prozess nicht verfolgen und beim Herunterfahren beenden kann, funktioniert dies:
quelle
expect daemon
bewirkt, dass Upstart für mich hängen bleibt (Ubuntu 12.04, Upstart 1.5, Nginx).expect fork
hat funktioniert, obwohl Upstart, wie @danorton andeutet, die falsche PID verfolgt. Ich konnte auch nicht wieder zur Arbeit kommen (siehe meine vollständige Antwort).Im NGINX-Wiki gibt es ein Beispiel für eine Upstart-Konfigurationsdatei .
Möglicherweise müssen Sie den Pfad zur Nginx-Binärdatei in der Konfigurationsdatei anpassen.
Diese Konfigurationsdatei funktioniert gut für mich mit Ubuntu 10.04 und Nginx 1.0.5.
Ich habe auch einen
nginx
Symlink beim/etc/init.d
Zeigen auf installiert,/lib/init/upstart-job
damit ich den Standardbefehlservice
zum Starten und Stoppen verwenden kannnginx
.Hinweis: Wenn Sie Phusion Passenger mit NGINX installieren, müssen Sie dem Upstart-Konfigurationsskript möglicherweise die folgende Zeilengruppe hinzufügen:
Ich fand dies in meiner Ubuntu-Konfiguration notwendig. Ansonsten, als ich ausgegeben habe
initctl stop nginx
oderservice nginx stop
Nginx nicht wirklich aufgehört hat. Ich bemerkte auch, dass Upstart dachte, der Nginx-Prozess hätte eine PID, die tatsächlich die PID eines der Passagierprozesse war. NGINX / Passenger verwirrt Upstart also eindeutig ein wenig.quelle
stop: Job failed while stopping
dabei. Hast du das gesehen?Ich benutze:
Das Anhalten
runlevel [!...]
scheint mehr Standard zu sein. Es ist das, was die Standard-SSH / Samba-Skripte tun. Sie sollten dasrespawn
Bit auch hinzufügen, damit es neu startet, wenn es stirbt. Ich bin mir auch nicht sicher, warum Sie wollen,console output
dass die Konsolenausgabe einfach an stdout gesendet wird. Das Standardverhalten besteht darin, einfach die Konsolenausgabe an den Logger zu senden.Sie können alle Zeilengruppen- Dokumente im Upstart-Wiki anzeigen
quelle
Weitere Informationen finden Sie unter http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu .
quelle
Seltsamerweise funktioniert keine der Antworten hier tatsächlich vollständig, da sie den Start in einem Stopp- / Abbruchzustand belassen, der verhindert, dass ein anderer anfängt zu arbeiten. Dies bedeutet, dass dies
restart nginx
fehlschlägt.Der Fehler mit Upstart ist unter https://bugs.launchpad.net/upstart/+bug/406397 gut dokumentiert, und ich bin erstaunt, dass es dem Autor von Upstart nicht wichtig genug zu sein scheint, ihn zu beheben. Die einzige Lösung, die ich gesehen habe, die funktioniert, ist die folgende (aus demselben Fehlerbericht gestohlen):
Der Vorteil, es so zu schreiben, ist, dass sogar der Respawn funktioniert. Der Nachteil ist, dass es hässlich und ein böser Hack ist.
quelle