Wie diagnostiziere ich Upstart-Fehler?

8

Ich habe eine Upstart-Conf-Datei in / etc / init, die gut startet, wenn ich sie manuell wie folgt starte:

sudo initctl start myconf

Wenn ich es ohne den Befehl sudo ausführe, erhalte ich den Fehler name = (unset) error, der auf Benutzerrechte zurückzuführen ist, aber das sollte nicht das Problem sein, wenn der Job beim Systemstart initialisiert wird, wenn Upstart richtig startet? (weil das alles von der Wurzel ausgeführt wird).

Der Inhalt des Skripts lautet:

start on runlevel [2345]
stop on runlevel [^2345]

exec /spatial/server_init.sh

... wo auf server_init.sh ein Python-Skript-basierter Server ausgeführt wird. Wenn ich den Status des Skripts direkt nach dem Anmelden bei der Shell überprüfe, heißt es Stopp / Warten. Ich habe auch die conf-Datei mit "start on net-device-up" ausprobiert, aber nichts ändert sich. Gibt es eine Möglichkeit, das Upstart-Systemprotokoll oder ähnliches anzuzeigen, um das Problem zu beheben?

Vielen Dank

U2ros
quelle
Manchmal, wenn Sie ein chdirin Ihrem Upstart-Skript haben und dieses Verzeichnis nicht existiert, wird kein Protokoll geschrieben und Sie erhalten die kryptische Nachricht:start: Job failed to start
bekannt als

Antworten:

13

Versuchen:

/var/log/upstart/JOBNAME.log

Möglicherweise möchten Sie es beim Debuggen in eine Aufgabe konvertieren.

Start beim räumlichen Start

Aufgabe

exec /spatial/server_init.sh

dann von der Konsole:

initctl gibt einen räumlichen Start aus
Initctl Status räumlicher Start
ppetraki
quelle
Ich werde es auch versuchen, danke. Ich gehe davon aus, dass dies tatsächlich Upstart-spezifische Probleme ausgibt. Enthält es auch Syntaxfehler in conf-Dateien?
U2ros
Hier wird stdout / err umgeleitet, daher sollte es ausführlicher sein.
ppetraki
1

Okay, einen Weg gefunden, aber es funktioniert nur, wenn der Fehler in dem Programm auftritt, das vom Skript ausgeführt wird (und wenn dieses Programm natürlich Fehlermeldungen zurückgibt), nicht Upstart selbst, aber das ist es, was ich in diesem Fall brauchte. Ich habe die Programmausgabe in eine Protokolldatei wie diese umgeleitet:

exec /spatial/server_init.sh >> /spatial/ogc.log 2>&1

Was das andere betrifft, habe ich herausgefunden, dass Sie die Upstart-Ausführlichkeit erhöhen können. Wenn ich das brauche, fange ich von dort aus an.

U2ros
quelle
0
  1. Überprüfen Sie, ob das Upstart-Verzeichnis vorhanden ist: / var / log / upstart (falls nicht, erstellen Sie das Verzeichnis)
  2. Überprüfen Sie Ihre Upstart-Version anhand von: initctl version oder apt-cache policy upstart

    Für alle Upstart-Versionen vor Version 1.4 war der Standardwert für die Konsole " Konsole keine" . Ab Upstart 1.4 ist der Standardwert das Konsolenprotokoll .

  3. Fügen Sie ein Konsolenprotokoll hinzu (vor der Skriptphase)
  4. Ihr Protokoll befindet sich unter: /var/log/upstart/"upstart-JOBNAME".log

Beispiel:

Konsolenprotokoll

Skript

exec /spatial/server_init.sh

Skript beenden

Konsolenprotokoll - Verbindet die Standardeingabe mit / dev / null. Standardausgabe und Standardfehler sind mit einem Ende eines Pseudo-Terminals verbunden, sodass jede Jobausgabe automatisch in einer Datei im Verzeichnis / var / log / upstart / für Systemjobs und in $ XDG_CACHE_HOME / upstart / (oder $ HOME /) protokolliert wird. cache / upstart / wenn $ XDG_CACHE_HOME nicht gesetzt ist) für Sitzungsjobs.

Konsole keine - Verbindet die Deskriptoren für Standardeingabe, Standardausgabe und Standardfehlerdatei des Jobs mit / dev / null.

Weitere Informationen zur Konsole finden Sie unter folgendem Link:

http://upstart.ubuntu.com/cookbook/#console-log

Zachlaniado
quelle