Wie debugge ich einen Startjob?

10

Ich habe folgenden Job in /etc/init/collector:

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file

Wenn ich den Job mit beginne sudo service collector start, hängt er. Wenn ich ctrl-cund renne initctl list, sehe ich das:

collector start/killed, process 616

Ich kann keine Instanz des twistdDaemons in ps sehen, und der HTTP-Server, den er bereitstellen soll, existiert nicht.

Ich habe dies sogar ohne 'Expect Daemon' und mit einem einfachen Aufruf eines einzeiligen Bash-Skripts unter Verwendung einer scriptZeilengruppe versucht, und es funktioniert immer noch nicht. Ich glaube, ich mache etwas sehr Falsches. Was könnte es sein?

Cera
quelle
Keine Antwort, aber ich habe mit einem ähnlichen Problem zu kämpfen. Es könnte sogar ein Fehler in Upstart sein: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 Ich weiß nicht, wie ich aus diesem hängenden Zustand herauskommen kann , außer beim Neustart. Ich glaube auch, dass es mit der expect daemonLinie zu tun hat .
Schaden

Antworten:

14

Sie können stdoutund stderrder gesamten Shell mit dem scriptPragma (anstelle von exec) in Verbindung mit exec >FILE 2>&1wie folgt umleiten :

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

Das sollte Ihnen hoffentlich einen besseren Einblick geben, was los ist. Ich fand dies nützlich, um alle möglichen Probleme in meinen Startskripten zu erkennen. Sie können die stdout/ Ihre Befehle stderrdirekt weiterleiten, aber Sie werden Fehler verpassen, die von der Shell ausgehen (wie Syntaxfehler).

Auf der anderen Seite, wenn servicees hängt, trifft es möglicherweise nicht einmal Ihr Skript. In diesem Fall hilft natürlich nichts davon.

Charles
quelle
Danke, das hat mich auf den richtigen Weg gebracht. Am Ende habe ich die Ausgabe an weitergeleitet logger, so dass ich einfach nachlassen konnte /var/log/syslog.
Cera
Außerdem werden Fehler in der conf-Datei selbst in angezeigt dmesg. Ich habe dies herausgefunden, nachdem ich bei Verwendung der oben genannten Informationen keine Ausgabe erhalten habe. Ich hatte einen Tippfehler in der chdir-Direktive gemacht.
CodingFoo
Wo setzen Sie diesen Code ein?
Kev
2

Es gibt auch das console logDeklarativ, wie hier definiert: http://upstart.ubuntu.com/cookbook/#console-log

Ich weiß nicht genug über Upstart, um zu wissen, ob es standardmäßig aktiviert ist, aber Sie können es pro Upstart-Job aktivieren, es wird standardmäßig ausgegeben an /var/log/upstart/<job>.log

Ehtesh Choudhury
quelle
0

Überprüfen Sie, ob Upstart Director vorhanden ist, und fügen Sie vor der Skriptphase ein Konsolenprotokoll hinzu. (In der Upstart-Version ab 1.4 ist dies die Standardeinstellung.)

Konsolenprotokoll

script exec> / path / to / some_log_file 2> & 1 exec your_command_here end script

Weitere Informationen finden Sie im Thread: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

Zachlaniado
quelle