Wie gebe ich einen Befehl zum Herunterfahren des Daemons mit upstart an?

9

Wie definiere ich in einer Upstart-Konfiguration, welcher Befehl zum Herunterfahren eines Servers verwendet werden soll? Nehmen wir an, ich habe einen Daemon mit zwei separaten Prozessen.

  • startup.sh - um den Server zu starten
  • shutdown.sh - um den Server herunterzufahren

Angenommen, ich habe eine Startdatei, die so aussieht.

description "Some Example Service"
author "Me"

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

exec startup.sh 

Wie kann ich upstart mitteilen, dass es shutdown.shbeim Herunterfahren des Servers aufgerufen werden soll? Wie erwartet Upstart normalerweise das Herunterfahren eines Daemons?

ams
quelle

Antworten:

10

Das execStarten des Prozesses ist in Ordnung. Wenn Sie ihn jedoch stoppen, müssen Sie die Zeilengruppe verwenden, wenn Sie unbedingt ein bestimmtes Skript oder einen bestimmten Befehlssatz ausführen müssen pre-stop.

pre-stop exec shutdown.sh

Ich gehe davon aus, dass Sie versucht haben, nur eine Exec-Zeilengruppe zu verwenden, und dies hat nicht funktioniert, möglicherweise weil Ihr Daemon eine spezielle Bereinigung erfordert. Beachten Sie, dass gut erzogene Dämonen beim Stoppen des Jobs ein Signal vom Start erhalten sollten. Wenn sie das Signal angemessen verarbeiten, sollte keine zusätzliche Bereinigung erforderlich sein.

Um einen Job zu stoppen, muss SIGTERM an ihn gesendet werden. Wenn vor SIGTERM etwas getan werden muss, tun Sie es hier. Dienste sollten SIGTERM wohl sehr elegant handhaben, daher sollte dies nicht notwendig sein.

Wenn es etwas Kritisches gibt, wie ein Flush auf die Festplatte, und das Erhöhen des Kill-Timeouts keine Option ist, ist Pre-Stop kein schlechter Ort, um dies zu tun

Lesen Sie in diesem Abschnitt auch den gesamten Workflow darüber, was passiert, wenn Sie einen Job beenden. Beachten Sie, wann Pre-Stop ausgeführt wird und wie anschließend ein Signal an den Prozess gesendet wird. So behandelt Upstart das normale Stoppen von Jobs.

Meine Quelle ist das offizielle Upstart-Kochbuch unter: http://upstart.ubuntu.com/cookbook/

Roadmr
quelle
1
"Beachten Sie, dass gut erzogene Dämonen beim Stoppen des Jobs ein Signal vom Start erhalten sollten. Wenn sie das Signal angemessen verarbeiten, sollte keine zusätzliche Bereinigung erforderlich sein." - Beachten Sie, dass wir in der Unix-Welt Skripte verwenden, um neben dem Job des Programmierers die Kontrolle über die Dinge zu haben. Und das ist eine lächerliche Bemerkung, denn wir brauchen einen Ort, an dem wir beispielsweise eine E-Mail senden, die Sperre von der Festplatte entfernen usw. können und diese Aufgaben nicht Teil des Daemons selbst sein müssen. Upstart ist also nicht bereit, in der Serverumgebung verwendet zu werden.
Kakaz
Aus dieser Antwort (der Eine!) Sehe ich, dass es keinen guten Weg gibt, das zu tun, was wir brauchen?
Kakaz