GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Der beste Weg, um einen Shutdown-Hook zu machen?

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 oder start 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.

Verwandte:Wie sperrt man den Bildschirm mit dem neuen Sperrbildschirm von der Befehlszeile aus?

Bearbeitet, um Runlevel 5 auf S zu ändern.


Ubuntu
  1. Survival neu starten – Best Practices

  2. Centos – Der beste Weg, um eine permanente Route hinzuzufügen?

  3. Der beste Weg, um einen Remote-Ordner zu mounten?

  4. Gibt es eine Möglichkeit, installierte Snap-Apps nativer aussehen zu lassen?

  5. Linux-Befehle „shutdown“, „poweroff“, „halt“, „reboot“.

Survival neu starten – Best Practices

Beste Möglichkeit, Docker unter Ubuntu 20.04 Linux zu installieren

Der beste Weg, um die Maschinen-ID unter Linux zu erhalten?

Wie lernt man SELinux am besten?

Der beste Weg, um alle iptables-Regeln zu löschen

Der beste Weg, um den Befehl zum Herunterfahren zu entfernen, aber den Neustart fortzusetzen