Das Upstart-Skript startet nicht

33

Ubuntu 10.04

Ich habe dieses Upstart-Skript ( /etc/init/pure-ftpd.conf ) erstellt:

# pure-ftpd - FTP server

description "Pure-FTPd server"

start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid
console output

pre-start script
    test -x /usr/local/sbin/pure-ftpd || { stop; exit 0; }
end script

exec /usr/local/sbin/pure-ftpd --maxclientsnumber 2 --maxclientsperip 10 --prohibitdotfileswrite --prohibitdotfilesread --noanonymous --chrooteveryone --dontresolve --nochmod --pidfile /var/run/pure-ftpd.pid

Aber...

# start pure-ftpd
start: Unknown job: pure-ftpd

und

# service pure-ftpd start
start: Unknown job: pure-ftpd


Was ist das Problem?
Muss man noch etwas tun?
Muss in /etc/init.d auch ein Skript erstellt werden?

Juan Simón
quelle
Ich habe die gleichen Probleme gehabt. Bitte versuchen Sie den Befehl initctl an der Konsole. Drücken Sie zum Aufrufen der Konsolensitzung Strg + ALT + F1 und melden Sie sich an. (Ich kann nicht verstehen, warum, aber ich habe es auf diese Weise geschafft)

Antworten:

26

Normalerweise bedeutet dies, dass Sie einen Fehler in der .confDatei haben - zum Beispiel bin ich nicht sicher, ob die pidZeilengruppe in 10.04 unterstützt wird, stopnicht im Skript verwendet werden kann usw.

Ich würde versuchen, die Datei von Grund auf neu zu starten (nur startmit stopusw.) und sie dann langsam aufzubauen, indem ich mehr und mehr Zeilen hinzufüge und sie über teste start pure-ftpd.

Beispielsweise:

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5

# start pure-ftpd
pure-ftpd start/running

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid

# start pure-ftpd
start: Unknown job: pure-ftpd
ordnen
quelle
Die Informationen im Wiki sind sehr veraltet ( upstart.ubuntu.com/wiki ). Andererseits ist die Upstart-Version in Lucid 0.6.5-8 und die PID-Datei sollte unterstützt werden: upstart.ubuntu.com/wiki/…
Juan Simón
1
AFAIK die pidZeilengruppe wurden seit der Version entfernt 0.5.0 2008-08-12 "One of those deaf-mutes". Benutze es nicht.
vereinbaren Sie den
Weiß jemand wo die aktualisierte Dokumentation ist?
Juan Simón
46

Sie können auch ausführen init-checkconf, um die Syntax zu überprüfen

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
Stefano Gargiulo
quelle
1
Der Befehl ist in 10.04 nicht vorhanden, in 12.04 jedoch.
Mark Stosberg
6
Auf einem kopflosen Ubuntu 12.04 Server funktioniert es (noch) nicht. Siehe bugs.launchpad.net/upstart/+bug/881885
FvD
1
Habe das Problem sofort gefunden! - Sollte in den startBefehl eingebaut werden, damit Sie eine aussagekräftigere Fehlermeldung erhalten ...
AT
26

Zunächst können Sie überprüfen, ob bekannt ist, dass der Start Ihres Jobs tatsächlich erfolgt:

sudo initctl list | grep your_job_name

... wo your_job_nameist der Name Ihres Upstart-Skripts abzüglich der .confErweiterung.

Wenn es nicht gefunden wird, können Sie versuchen, die Konfiguration neu zu laden und dann erneut zu überprüfen:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

Versuchen Sie dann erneut, Ihren Job zu starten:

sudo start your_job_name

Wenn Sie wurden keine Protokollierung immer in /var/log/daemon.logoder /var/log/syslogvor, könnten Sie einige jetzt haben.

Mark Stosberg
quelle
1
Und was ist, wenn dies zeigt, dass der Job nicht für den Start bekannt ist, obwohl die Syntax korrekt ist und sich in / etc / init befindet?
FvD
1
Haben Sie "sudo initctl reload-configuration" wie vorgeschlagen versucht? Haben Sie Berechtigungen, Protokolle und Dokumente überprüft?
Mark Stosberg
Ich tat es und tat es erneut, nachdem ich Ihren Kommentar gelesen hatte. Sogar sichergestellt, dass der Benutzer ein Systembenutzer ist (useradd -r). Vielleicht stimmt etwas anderes nicht - im Zusammenhang mit dem Neustart -, also habe ich den Entwicklern des Dienstes, den ich starten möchte, ein Problem gemeldet (es ist ein glänzender Server, den ich beim Booten starten möchte).
FvD
1
Und es waren doch Berechtigungen! Auch wenn beim Auflisten des Verzeichnisses alles pfirsichfarben aussah, hat initctl erst nach einem chmod 644 das Skript aufgegriffen. Danke noch einmal.
FvD
1
Denken Sie daran, dass Ihr_Jobname ohne die .conf-Endung der Datei ist. Ich habe eine Stunde gebraucht, um das herauszufinden.
Marcel
6

Die relevanteste Referenz für die Jobdateisyntax ist verfügbar, wenn Sie den Befehl ausführen:

man 5 init

auf Ihrem System. Für Ubuntu 10.04 ist, wie Sie in der vorherigen Antwort festgestellt haben, die Syntax der PID-Datei falsch.

Jedes Mal, wenn Sie diesen "unbekannten Job" -Fehler zurückerhalten, ist es eine gute Idee, die Protokolle zu überprüfen (vor 11.04, /var/log/daemon.log, 11.04 und höher, alles in / var / log / syslog).

Möglicherweise sehen Sie einen Fehler wie diesen:

init: /etc/init/test.conf:2: Unknown stanza
SpamapS
quelle
3

Wie auch immer, ich bin hier, weil ich das gleiche Problem hatte, aber meine Syntax war 100% korrekt.

Nach einigem Debuggen habe ich ein anderes Problem entdeckt, das diesen Fehler "Unbekannter Job" verursachen kann:

upstarts verwendet inotify , um Änderungen an der .conf-Datei zu überwachen und Jobs automatisch zu installieren. Dies ist sehr cool (dafür brauchen Sie nicht so etwas wie update.rc mit upstart!) , kann aber nicht perfekt sein, wenn Sie (wie ich in diesem Fall) verwenden In einigen FTP / SCP-GUI-Programmen zum Hochladen und Bearbeiten von Konfigurationen auf Remote-Servern kann der Job unbeaufsichtigt von upstart deinstalliert werden, wenn Sie die Datei auf diese Weise bearbeiten.

einfach das machen (das hat mich gerettet)

touch /etc/init/*

Es werden Inotify-Ereignisse generiert, um alle Upstart-Confs zu aktualisieren.

Stefano Gargiulo
quelle
2

Ich hatte das gleiche Problem in meinen Ubuntu 14.04 Docker Containern. Wie sich herausstellt, unterstützt das Ubuntu 14.04-Image (wenn nicht andere) für Docker Upstart nicht so wie eine vollständige virtuelle Maschine.

Um diese Frage zu beantworten, warum der Dienst nicht startet, liegt es daran, dass initctl kein tatsächliches Upstart-Programm ist: Es ist / bin / true zugeordnet.

Führen Sie zur Überprüfung die folgenden Schritte auf einem Ubuntu 14.04 Docker-Container gegen Vagrant und gegen ein DigitalOcean-Droplet aus

$ ls -al /sbin/initctl

Sie werden feststellen, dass initctl in Docker nicht dasselbe ist wie in den anderen.

Ein Link, der Ihr Verständnis fördern kann. Https://github.com/docker/docker/issues/1024

Johnathan J.
quelle
2
Das gleiche Problem ist mit Docker aufgetreten: Kurz gesagt, Docker führt immer nur einen Prozess gleichzeitig aus, sodass kein Neustart und nichts anderes ausgeführt werden kann. Um sicherzustellen, dass der Dienst neu gestartet wird, wenn er stirbt, habe ich Supervisord verwendet. PS: Sie sollten nicht mehrere Dienste in einem Container
ausführen. Der springende
1
Ich bin gerade auf diesen Artikel gestoßen und dieser gibt sehr gute Ratschläge zum Trennen von Bedenken: blog.docker.com/2014/06/why-you-dont-need-to-rundsshd-in-docker, was wahrscheinlich sogar der Fall ist Bessere Strategie als Supervisor
MrE