Bash: watch als Prozessüberwacher mißbrauchen

Oftmals hat man das Problem, daß Daemons unter Linux abstürzen und es keinen Masterprozess gibt, der sowas überwacht und neustartet.

Die Daemontools von DJB hatten da eigens so ein Überwachungsprogramm, aber im Prinzip ist so ein Tool nichts anders als eine Endlosschleife, die einfach nur den gestorbenen Prozess neustartet:

for(…) { run(„serverdaemon“); }

Anstatt jetzt jedesmal so ein Loopprogramm zuschreiben, wäre ja etwas universelles gut, oder ? 🙂

Einfach watch benutzen : watch -n 0,1 „… bashzeile zum starten…“

Das könnte dann so aussehen :

#!/bin/bash

watch -n 0,1 „/usr/bin/meinserverdaemon profile.one -s targetmode -p 887“

Leider kann man ja init.d und systemctl Starts nicht in eine Schleife legen, da diese Prozesse die eigentlich zu startenden Programme absplitten.

Zum Stoppen muß man nun allerdings erst das Watch und dann den Serverdaemon stoppen, sonst hat man mit Zitronen gehandelt.

2 thoughts on “Bash: watch als Prozessüberwacher mißbrauchen

  1. systemd kann sehr wohl abgestorbene Prozesse neu starten. Dazu gibt es „Restart=on-failure“ im jeweiligen Unit-File. Das setze ich selbst für HHVM ein, der im noch nicht so lang zurückliegenden Entwicklungsstadium gern mal abstürzte.

    Vor systemd habe ich monit verwendet, welches genau für den Zweck geschrieben wurde, Prozesse und Services zu überwachen und notfalls neu zu starten.

    • Hallo,

      das ist richtig, aber dem wird ja gar nicht wiedersprochen 😉

      Gemeint war, daß das hier : watch -n 1 „systemctl start testserver“ : nicht sinnvoll funktioniert, weil systemctl den eigentlichen Start des Prozesses absplittet. Macht ja auch Sinn, soll ja nicht „blocken“ 🙂

      Wenn der Prozess blockiert z.b. so : watch -n 1 „php startmyserver.php“, dann kann watch als supervisor dienen.
      So kann man sich schnell einen Server nebst Prozessüberwachung bauen. Den Watch splittet man dann von der Bash weg.

      Ich habe neulich auch mal eigene Unitfiles für alte Serverdienste geschrieben, weil mir die Meldung „wird an sysv ausgelagert“ auf den Keks ging 🙂

Schreibe einen Kommentar