2012-05-29 4 views
5

Wie kann ich eine Art Reload-Befehl an einen Daemon senden, der von upstart gestartet wurde, ohne dass ich ihn komplett stoppen muss?Send reload command to upstart service

+0

Dienstleistungen, die über 'upstart begonnen werden, sind entweder - Zeitprogramme, die ausgeführt werden, um Ereignisse zu verarbeiten, oder sie sind seit langem laufende Daemons. Normalerweise ist stdin/stdout/stderr für diese Art von Programmen nicht vorhanden - sie schreiben in Protokolldateien, wenn sie Probleme melden müssen, und lesen Eingaben von bestimmten Dateien. Ich bin neugierig, warum Sie versuchen, dieses normale Paradigma zu umgehen - welches Problem versuchen Sie zu lösen? – sarnold

+0

Ich führe ein Node.js-Skript als Daemon über Upstart, die permanent ausgeführt werden muss. Dieses Skript muss manchmal einen Neuladebefehl erhalten. Leider unterstützt upsattrt keine Syntax wie 'resload servercontrol'. Also habe ich über stdin nachgedacht, da ich das Skript nicht stoppen kann für 'stop servercontrol & start servercontrol'. – buschtoens

+0

'reload service' sendet ein' SIGHUP' Signal an Ihren Prozess; Das 'SIGHUP'-Signal wird oft von Dämonen benutzt, um das erneute Lesen ihrer Konfigurationsdateien anzufordern ... wird das für Sie funktionieren? Es wäre einfach für Admins, Ihre Aufgabe ähnlich wie alle anderen Jobs zu verwalten. – sarnold

Antwort

9

upstart verwaltet in der Regel zwei Arten von Prozessen:

  • Programme, die einmal laufen ein Ereignis
  • Dämonen zu behandeln, die langlebigen und einen Service bieten etwas anderes

Daemons typischerweise Stellen Sie einen Signalhandler für das Signal SIGHUP zur Verfügung, das den Daemon auffordert, seine Konfigurationsdateien erneut zu lesen und erneut zu parsen. (SIGHUP ist ein Aufhängungssignal, relevanter für Endgeräte, die kommen und gehen können, wenn Telefonleitungen oder SSH-Protokolle verbunden oder getrennt werden. Für Programme, die keine Endgeräte haben, macht es keinen Sinn, ihr Endgerät "aufzulegen" , so außer vom Systemadministrator Aktion das Signal nicht gesendet Daemon würde.)

Wenn Sie Ihr Programm ändern können, um seine Konfiguration neu zu lesen, wenn sie ein SIGHUP Signal empfängt, dann können Sie den Standard upstartreload service Befehl um die Konfigurationsdateien neu zu laden. (Sie können irgendetwas auf diesem Signal tun, aber Systemadministratoren erwarten Dämonen, Konfigurationsdateien auf diesem Signal wieder zu lesen - macht etwas anderes möglicherweise verwirrend und ärgerlich.)

+4

Sie können auch ein Upstart-Skript konfigurieren, um ein anderes Signal für den Befehl 'reload' zu senden. Innerhalb des Skripts deklarieren Sie einfach 'reload signal USR2' oder was auch immer Ihre App erwartet. –

Verwandte Themen