Da Ubuntu seit einiger Zeit auf Upstart angewiesen ist, möchte ich einen Upstart-Job verwenden, um bestimmte Anwendungen beim Herunterfahren oder Neustarten des Systems ordnungsgemäß herunterzufahren. Es ist wichtig, dass das Herunterfahren oder Neustarten des Systems verzögert wird, bis diese Anwendungen heruntergefahren werden.
Die Anwendungen werden gelegentlich manuell gestartet und sollten beim Herunterfahren des Systems automatisch durch ein Skript beendet werden (das ich bereits habe). Da die Anwendungen nicht zuverlässig beendet werden können, ohne dass (fast alle) anderen Dienste laufen, muss das Beenden der Anwendungen erfolgen, bevor der Rest des Herunterfahrens beginnt.
Ich denke, ich kann dies durch einen Upstart-Job lösen, der beim Herunterfahren ausgelöst wird, aber ich bin mir nicht sicher, welche Ereignisse ich auf welche Weise verwenden soll. Bisher habe ich folgende (teilweise widersprüchliche) Aussagen gelesen:
- Es gibt kein allgemeines Ereignis zum Herunterfahren in Upstart
- Verwenden Sie eine Strophe wie
start on starting shutdown
in der Stellenbeschreibung - Verwenden Sie eine Strophe wie
start on runlevel [06S]
in der Stellenbeschreibung - Verwenden Sie eine Strophe wie
start on starting runlevel [06S]
in der Stellenbeschreibung - Verwenden Sie eine Strophe wie
start on stopping runlevel [!06S]
in der Stellenbeschreibung
Aus diesen Empfehlungen ergeben sich folgende Fragen:
- Gibt es in Ubuntus Upstart ein generelles Shutdown-Event oder nicht?
- Was ist die empfohlene Methode zur Implementierung eines „Shutdown-Hooks“?
- Wann werden die Ereignisse Runlevel [x] ausgelöst; ist das beim Betreten des Runlevels oder beim Betreten des Runlevels?
- Können wir so etwas wie
start on starting runlevel [x]
verwenden oderstart on stopping runlevel [x]
? - Was wäre die beste Lösung für mein Problem?
Vielen Dank
Akzeptierte Antwort:
starting
und runlevel
sind separate Ereignisse, daher kann man nicht sinnvollerweise starting runlevel N
sagen .
Der runlevel N
Das Ereignis wird zu Beginn des Eintritts in den Runlevel ausgegeben. Wenn Sie start on runlevel N
dann wird Ihre Aufgabe bei der Eingabe ausgeführt. Die Art der Ausführung, wenn der Eintritt in den Runlevel abgeschlossen ist, ist run on started rc RUNLEVEL=N
.
So wie ich es verstehe, benötigen Sie einen start on runlevel [06S]
zu tun, was du willst; es sollte theoretisch laufen, bevor irgendetwas anderes gestoppt wird. Für eine feinere Steuerung können Sie start on stopping apache or stopping mysql or ...
verwenden damit Ihr Task ausgeführt wird, bevor einer von ihnen heruntergefahren werden darf.
Bearbeitet, um Runlevel 5 auf S zu ändern.