Upstart sieht mein neues Skript nicht

27

Ich habe ein neues Skript zu /etc/init/called hinzugefügt, minecraft.confdas das Skript enthält:

start on startup
stop on shutdown
respawn
respawn limit 20 5

script
  export HOME="/root"
  exec /root/minecraft/start.sh 2>&1 >> /var/log/minecraft.log
end script

post-start script
   echo "minecraft started"

Wenn ich versuche, start minecrafterhalte ich den Fehler:start: Unknown job: minecraft

Ich habe versucht zu rennen initctl listund mein Minecraft-Job ist nicht aufgeführt. Ich habe versucht zu rennen initctl reload-configurationund es macht keinen Unterschied.

Andere Jobs, die in der Liste aufgeführt sind, initctl listfunktionieren einwandfrei beim Starten, Stoppen und Neustarten.

Warum wird mein neues Skript von upstart nicht angezeigt?

Jasarien
quelle
Das mag eine blöde Frage sein, aber ... soll das nicht dein Drehbuch sein /etc/init.d/?
Wolfer
@snow danke, aber ich habe das schon gelesen und ich habe immer noch das Problem.
Jasarien
@Wolfer laut dem Handbuch für die ersten Schritte von upstart heißt es: "Sobald Sie zufrieden sind, platzieren Sie die Dateien in /etc/initund jetzt können Sie upstart neu starten und verwenden."
Jasarien
Ich habe versucht, das Problem zu reproduzieren, aber ohne Erfolg. Ich habe deinen Code nach /etc/init/minecraft.conf kopiert und sudo start minecraftohne Probleme ausgegeben . Hier ist der Inhalt der Protokolldatei. ~$ sudo cat /var/log/upstart/minecraft.log minecraft started /proc/self/fd/9: 3: exec: /root/minecraft/start.sh: not found minecraft startedKönnen Sie weitere Details zu der von Ihnen verwendeten Ubuntu-Version und nützliche Informationen von syslog bereitstellen?
Goran Miskovic

Antworten:

12

Überprüfen Sie die Upstart-Protokolle (in /var/log/syslog), während Sie die Konfiguration mit erneut laden initctl reload-configuration. Wenn ein Syntaxfehler vorliegt, wird er dort angezeigt. Das ist normalerweise der Grund, warum Sie Ihre neue Startkonfiguration nicht verwenden können.

rcomblen
quelle
11

Mit dem folgenden Befehl können Sie Ihre Skriptsyntax auf einfache Weise überprüfen:

init-checkconf -d /etc/init/service_name.conf

Ich habe festgestellt, dass auch mit einer gültigen Upstart-Datei, wenn die Datei beim letzten Start des Servers nicht vorhanden war, der Server neu gestartet werden muss, damit Upstart die Datei anzeigen kann.

Mike Bethany
quelle
9

Ich fühle mich irgendwie dumm ... Aber hier ist es:

Ich habe die Zeilengruppe "end script" ganz am Ende des Upstart-Skripts verpasst ...

post-start script
   echo "minecraft started"

gewesen sein sollte

post-start script
   echo "minecraft started"
end script

Ich bin mir nicht sicher, warum es bei @schkovich ohne das geklappt hat end script, obwohl ...

Jasarien
quelle
2
Weil ich die Zeilengruppe end script hinzugefügt habe. Eingebaute (Mind) Auto-Code-Vervollständigung. :(
Goran Miskovic
Ich habe das gleiche Problem, aber es macht mich wütend, dass nichts in / var / log und initctl reload-configuration erscheint --verbose ist still.
Neil McGill
4

In meinem Fall war es ein leeres authorFeld, wie folgt:

author ""

Es funktionierte nur, nachdem etwas in den Anführungszeichen hinzugefügt wurde.

# initctl reload-configuration

warf auch /etc/init/servicename.conf:2: Expected token zu Syslog anstelle von stdout . Zu beschäftigt, um einen Fehlerbericht für ein sterbendes Paket einzureichen.

int_ua
quelle
3

Dies restarttrifft möglicherweise nicht speziell zu, ist jedoch erwähnenswert: Wenn Sie eine Upstart-Konfigurationsdatei für einen ausgeführten Dienst bearbeiten, wird die Konfiguration durch Ausführen von NICHT neu geladen. Sie müssen laufen stopund startneue Änderungen wirksam werden.

http://upstart.ubuntu.com/cookbook/#restart

kristi
quelle