Test ob ein Programm läuft oder sich aufgehangen hat.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Test ob ein Programm läuft oder sich aufgehangen hat.

Beitrag von vobie » 26.10.2008 18:14:20

hi,

1.
ich habe bereits ein Script das prüft ob ein Programm läuft,
aber wenn sich jenes Programm aufhängt so bleibt ja die PID erhalten.
Die Auswertung im Script erfolgt mit pidof.
Das Problem, wenn ich z.b die CPU Auslastung des zu prüfenden Programm's
mit in die Auswertung übernehme bringt mir das nicht viel, da selbiges auch mal 100%
erreicht.
gibt es eine Möglichkeit zu prüfen ob sich ein Programm aufgehängt hat um es dann
neu zu starten ?

2.
Programm "A" soll Programm "B" über ein Button starten und sich dann beenden.
Wird Programm "B" beendet soll Programm "A" wieder starten.

Wie kann ich das in einem Shellscript realisieren ??


mfg
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

suno
Beiträge: 354
Registriert: 25.07.2008 17:33:40

Re: Test ob ein Programm läuft oder sich aufgehangen hat.

Beitrag von suno » 26.10.2008 19:58:02

warum verwendest du nicht nagios oder aehnliches?

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Re: Test ob ein Programm läuft oder sich aufgehangen hat.

Beitrag von vobie » 26.10.2008 20:49:11

suno hat geschrieben:warum verwendest du nicht nagios oder aehnliches?
weil es auf dem System nur zwei Anwendungen und minimales X ohne Fenstermanager gibt.

nagios ist da etwas zu viel des guten.
Übrigens benutze ich bereits nagios zur Server Überwachung.

Das minimal System ist ein alter Rechner, der nur einen Internet Browser und Mail Client bereitstellen soll.
Das ganze auch nur mit virtueller Tastatur ohne Maus.
Die Eingaben erfolgen ausschließlich über eine bluetooth Fernbedienung

Der Rechner wird (soll) auch unabhängig vom Netzwerk (nur Internet) laufen.
mfg
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Methusalix

Re: Test ob ein Programm läuft oder sich aufgehangen hat.

Beitrag von Methusalix » 27.10.2008 00:27:05

Hallo,

zu 1.)
...gibt es eine Möglichkeit zu prüfen ob sich ein Programm aufgehängt hat um es dann
neu zu starten ?
Du kannst doch z.B. mit ps den Status des Programmes ermitteln
(der z.B. auf Z stehen könnte - siehe man page) und in Abhängigkeit davon Maßnahmen einleiten.
ps wird doch auch auf einem Minimalsystem vorhanden sein.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Test ob ein Programm läuft oder sich aufgehangen hat.

Beitrag von cosmac » 27.10.2008 14:48:27

hi,

wenn's nur um diese zwei Programme geht, kann man wohl was machen: Mail-Programme hängen sich nicht auf, das können wir vertagen. Der Iceweasel hängt sich aber wirklich so auf, dass man von außen kaum unterscheiden kann, ob er vielleicht nur auf den Benutzer wartet. Deshalb bekommt er eine Startseite, die sich regelmäßig neu lädt und zwar von einem Script, das als lokaler "Webserver" dient. Wenn die Seite zu lange nicht neu geladen wird, kann das Script den Browser neu starten.

Zum Beispiel mit diesen drei Dateien:

watchdog.html ist die Startseite, sie macht ein 2. Fenster auf. Das lässt sich mit besserem JavaScript sicher noch verfeinern

Code: Alles auswählen

<html>
<body onLoad='window.open("http://localhost:1234", "_blank");'>
</body>
</html>
in das 2. Fenster wird die watchdog.http geladen

Code: Alles auswählen

HTTP/1.0 200 OK
Date: Mon, 14 Feb 2005 06:04:27 GMT
Content-Type: text/html; charset=UTF-8
Connection: Close

<html>
<head> <meta http-equiv="refresh"; content="10"> </head>
<body>
wenn dieses Fenster geschlossen wird, wird der Browser automatisch neu gestartet.
</body>
</html>
man achte auf die Leerzeile vor html.

Und schließlich das Script

Code: Alles auswählen

#/bin/sh

TIME_OUT=1      # nach einer Sekunde wird der Browser das erste Mal gestartet

while true; do
  if ! netcat -l -p 1234 -w $TIME_OUT -q 2 < /usr/local/bin/watchdog.http 2> /dev/null
  then
    killall --quiet --wait firefox-bin
    killall --quiet --wait mplayer
    iceweasel file:///usr/local/bin/watchdog.html &
    TIME_OUT=25 # nach den Neustart lange genug warten
  else
    TIME_OUT=15 # solange er laeuft, kontrollieren wir oefter
  fi
done
Auf einem sehr langsamen Rechner müssen die Zeiten evt. verlängert werden. Der mplayer steht hier als Beispiel für ein Programm, das vom Browser gestartet wurde und dann eigenständig weiterläuft.
Über das Verzeichnis für die Dateien kann man streiten, aber das Script gehört nach /usr/local/bin und die anderen beiden sind ja irgendwie auch ausführbar und so stehen sie alle beisammen.
Edit: das Script sollte unter einem normalen User laufen.
Als zusätzliche Maßnahme gegen Browser in Endlosschleifen benutze ich "nice -3 iceweasel"; aber das ist eher für normale Desktops interessant.
Beware of programmers who carry screwdrivers.

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Re: Test ob ein Programm läuft oder sich aufgehangen hat.

Beitrag von vobie » 30.10.2008 21:03:31

hi,

danke erstmal für die Anregungen.
bin jetzt am ausprobieren von div. Möglichkeiten.

mfg
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Antworten