mit ps -aef|grep bla prüfen ob der Prozess „bla“ läuft
wenn er läuft, nix machen
wenn er nicht läuft, ihn mit ./bla starten
diese Abfrage ca. jede Minute wiederholen
das Problem an dem Script ist, dass das grep auf den Prozessnamen sich auch selbst mit zurück liefert, daher kann man den Rückgabewert nicht auswerten. Ich habe dafür bisher auch noch keine saubere Lösung gefunden. Vielleicht weiss ja jemand wie’s geht.
Diese Lösung ist definitiv nicht sauber und nicht getestet, sollte aber trotz allem funktionieren.
#!/bin/sh
var=ps -eaf | grep prozessname | wc -l
if [$var -lt „2“]; then
programmname
else
echo „alles ok“
fi
exit 0
Das klingt nach einem kruden Gewurschtel. Was genau hast Du
vor?
Naja, genau das was da steht Hintergrund: bei uns in der Firma muss man auf bestimmten Unix-Maschinen ab und zu einen Prozess starten. Aus noch ungeklärter Ursache beendet der sich aber manchmal von alleine. Daher möchte ich regelmäßig schauen ob der Prozess noch läuft, und wenn nicht, ihn neu starten bis das eigentliche Problem gelöst ist.
Das klingt nach einem kruden Gewurschtel. Was genau hast Du
vor?
Naja, genau das was da steht Hintergrund: bei uns in der
Firma muss man auf bestimmten Unix-Maschinen ab und zu einen
Prozess starten. Aus noch ungeklärter Ursache beendet der sich
aber manchmal von alleine. Daher möchte ich regelmäßig schauen
ob der Prozess noch läuft, und wenn nicht, ihn neu starten bis
das eigentliche Problem gelöst ist.
Wenn Du den Prozess im Vordergrund laufen lassen kannt: daemontools
ansonsten:
STARTPROC(8) The SuSE boot concept STARTPROC(8)
NAME
Startproc - Start processes identified by full path name
SYNOPSIS
startproc [+/-] [-s] [-u uid] [-g gid] [-v] [-e] [-l
log\_file|-q] [-f pid\_file] /path/to/executable [arguments
for executable]
DESCRIPTION
startproc check for all processes of the specified exe
cutable and starts it if no processes are found.
das Problem an dem Script ist, dass das grep auf den
Prozessnamen sich auch selbst mit zurück liefert, daher kann
man den Rückgabewert nicht auswerten. Ich habe dafür bisher
auch noch keine saubere Lösung gefunden. Vielleicht weiss ja
jemand wie’s geht.
Hi Martin,
um genau diesen Effekt zu vermeiden (grep liefert auch sich selbst zurück), könnte man eine zwei Pipe dranhängen, etwa so:
ps -eaf | grep prozessname | grep -v grep
dann klappts auch mit dem Nachbarn… (natürlich nur, wenn der Prozessname nicht den String ‚grep‘ selbst enthält). Alternative, wenn der Prozessname z.B. ‚hugo‘ ist und man diesen hart eincodieren kann:
ps -eaf | grep [h]ugo
(ist ein bischen tricky, funktioniert aber trotzdem