
Ich habe einen Server, der von Watchdog überwacht wird und der gelegentlich aufgrund fehlerhafter Netzwerkhardware, die ich derzeit nicht ersetzen kann, neu gestartet wird. Wie ich gelesen habe, sendet Watchdog ein SIGTERM an alle Prozesse, fordert ein sicheres Herunterfahren an und sendet nach kurzer Zeit ein SIGKILL, das den Prozess sofort stoppt. In diesem Fall führt dies jedoch zu Datenbeschädigungen, da der wichtigste Prozess noch nicht vollständig heruntergefahren ist und ungeschriebene Daten enthält.
Wie lange dauert diese Pause, die Watchdog zwischen der Aufforderung, alle Prozesse zu stoppen, und dem erzwungenen Stoppen einlegt? Ist sie in Watchdog fest verdrahtet, in watchdog.conf festgelegt (falls dies der Fall war, wurde es nie in der Manpage dokumentiert) oder ist sie dieselbe wie eine andere Systemeinstellung? Wie kann ich diese Einstellung ändern?
Bearbeiten: Ich habe das Timeout gefunden, suche aber immer noch nach Anweisungen zum ordnungsgemäßen Wiederaufbau und zur Integration in das System.
Antwort1
Die offizielle Version 5.15 bei Sourceforge enthält diese Option nun. Sie kann in der Datei watchdog.conf mit der folgenden Zeile konfiguriert werden:
sigterm-delay = 5
(in der Beispieldatei auskommentiert). Bitte beachten Sie, dass die experimentelle Version „V6“ nicht mehr verwendet werden sollte, da 5.15 praktisch alle Funktionen und auch mehrere Fehlerbehebungen enthält. Beachten Sie auch, dass die „Sat“-Website im Laufe des Jahres 2019 aufgrund der Einstellung der NERC-Finanzierung möglicherweise geschlossen wird.
Antwort2
Ausdie Watchdog-Quelle shutdown.c
, Zeile 445, die Pause ist fest in Watchdog verdrahtet und beträgt fünf Sekunden.
Antwort3
Ich habe hier einige Informationen zum Erstellen, Konfigurieren und Testen des Linux-Watchdog-Daemons gepostet:
http://www.sat.dundee.ac.uk/~psc/watchdog/Linux-Watchdog.html
Die kurze Antwort lautet: Sie müssen Ihr System für den Build für dieses Projekt konfigurieren:
sudo apt-get build-dep watchdog
sudo apt-get install build-essential automake libtool
Holen Sie sich dann den Quellcode, den Sie wahrscheinlich bereits haben, aber die neueste Version kann mit diesen Schritten erstellt werden:
sudo apt-get install git
git clone git://git.code.sf.net/p/watchdog/code watchdog-code
Wechseln Sie in das Codeverzeichnis und bereiten Sie die Kompilierung vor:
cd watchdog-code
autoreconf -i
./configure
Dann in das Quellverzeichnis und kompilieren:
cd src
make clean
make
Im aktuellen Verzeichnis befinden sich die neuen Binärdateien. Testen Sie sie, bevor Sie sie „live“ schalten, indem Sie verwenden sudo make install
, oder erstellen Sie zumindest Sicherungskopien der vom System bereitgestellten Programme. Sie sind im Vergleich zu den vom System bereitgestellten Programmen aufgrund von Debugsymbolen aufgebläht. Sie können den Befehl strip verwenden, wenn Sie ihre Größe reduzieren möchten.
Können Sie sagen, wie viel Zeit Sie benötigen, damit SIGTERM funktioniert?
Bearbeitet, um hinzuzufügen:
Wenn Sie den aktuellen GIT-Pull (14. September 2013) verwenden, bearbeiten Sie shutdown.c und ändern Sie in Zeile 363 „safe_sleep(4);“, um den gewünschten Timeout-Wert in Sekunden zu erhalten. Wenn Sie den Code für den systemseitig bereitgestellten Watchdog (wie oben erwähnt) bearbeiten, achten Sie darauf, dass sleep() nicht länger als das Hardware-Timeout (normalerweise 60 Sekunden) dauert, da das System sonst einfach neu gestartet wird! Das war der Grund für die Funktion safe_sleep(), um den Watchdog während des Wartens mit Strom zu versorgen.