Verwenden von upstart mit Stopp unbekannter Instanz

8

Ich fange gerade erst an, also habe ich ein sehr einfaches Skript geschrieben, um es in eine Protokolldatei mit dem Namen zu drucken, vm-service.confdie ich eingefügt habe /etc/init:

description "Virtual Images"
author      "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn   


script
echo "DEBUG: `set`" >> /tmp/vm-service.log

end script


pre-stop script
    echo "DEBUG: `set`" >> /tmp/vm-service.log
end script

Wenn ich laufe sudo start vm-service, wird Folgendes ausgegeben:

vm-service start/running, process 29034

Aber wenn ich laufe sudo stop vm-service, wird Folgendes ausgegeben:

stop: Unknown instance

Ich habe versucht zu laufen sudo initctl reload-configuration, aber ich bekomme immer noch den Fehler beim Stoppen.

Ich habe mir das Kochbuch angesehen, aber mir fehlt wahrscheinlich etwas Offensichtliches.

Berater
quelle

Antworten:

7

Upstart betrachtet den Job als gestoppt, wenn der Hauptprozess (was ausgeführt wird, wenn das Skript oder die Exec-Zeilengruppen angegeben sind) beendet wird. Upstart führt dann den Post-Start-Prozess aus.

Was also passiert, ist, dass das erste Skript ausgeführt und beendet wird. Upstart erwägt, den Job zu stoppen, und das zweite Skript wird ausgeführt und beendet. Wenn Sie den Befehl stop für einen bereits gestoppten Job ausführen, wird die angezeigte Nachricht gedruckt.

Verwenden Sie dazu eine Zeilengruppe vor dem Start:

pre-start exec foo --bar

post-start exec baz --foo

Wenn Sie dies tun, sieht Upstart den Job als gestartet an, sobald die Zeilengruppe vor dem Start beendet ist, und nicht als gestoppt.

CameronNemo
quelle