Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
ibins
- Beiträge: 3
- Registriert: 26.05.2013 13:37:06
Beitrag
von ibins » 26.05.2013 13:43:56
Hallo,
ich möchte gerne regelmäßig prüfen ob ein Perlscript läuft und wenn nicht es neu starten.
Alles was ich bisher finden konnte hat mir leider nicht weitergeholfen.
Letztstand:
Code: Alles auswählen
#!/bin/bash
if ! ps ax | grep "waagen" | grep -v "grep" 1> /dev/null;
then
echo "read established"
else
/usr/bin/perl /pfad/waagen.pl
fi
exit
Hat jemand von euch einen Hinweis für mich, Bitte?
Vielen Dank! Schönen Sonntag noch!
Michael
-
Cae
- Beiträge: 6349
- Registriert: 17.07.2011 23:36:39
- Wohnort: 2130706433
Beitrag
von Cae » 26.05.2013 14:04:32
Code: Alles auswählen
#!/bin/sh
cmd='perl /tmp/sleep.pl'
pgrep -xf "$cmd" >/dev/null || $cmd
Crontab:
So oder so aehnlich.
Willkommen im Forum!
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
uname
- Beiträge: 12405
- Registriert: 03.06.2008 09:33:02
Beitrag
von uname » 26.05.2013 14:08:30
Solltest du in der ersten Zeile des Perl-Scripts den Perl-Shebang eingetragen haben kannst du auf "perl" zum Aufruf noch verzichten.
-
wanne
- Moderator
- Beiträge: 7550
- Registriert: 24.05.2010 12:39:42
Beitrag
von wanne » 26.05.2013 15:28:23
ich würde das so machen:
Code: Alles auswählen
pid=0
while [ 1 ]
do if ! ps -eo pid | grep -E "^ $pid$"
then perl /pfad/waagen.pl&
pid=$!
fi
sleep 5
done
PS: zwichen ^ und $pid muss ein Leerzeochen, (sieht man schlecht) weil ps jede Spalte mit einem solchen beginnt.
Anmerkung das Script erkennt nur von ihm selbst gestartete instanzen. Du kannst auch nach dem namen des scriptes in den Prozessen suchen aber das birkt halt immer die Gefahr, dass irgend jemand ein script nutzt, das gleich heißt.
rot: Moderator wanne spricht, default: User wanne spricht.
-
wanne
- Moderator
- Beiträge: 7550
- Registriert: 24.05.2010 12:39:42
Beitrag
von wanne » 26.05.2013 15:41:33
Edit: das geht eigentlich viel simpler:
Sobald das Script beendet wird einfach direkt wieder neu starten...
rot: Moderator wanne spricht, default: User wanne spricht.
-
Cae
- Beiträge: 6349
- Registriert: 17.07.2011 23:36:39
- Wohnort: 2130706433
Beitrag
von Cae » 27.05.2013 00:30:57
Und wenn's sich forkt, aber weiter laeuft, hast du 'ne Endlosschleife, die froehlich Perl-Prozesse erzeugt. Ich wuerde da wenigstens ein
sleep reinpacken a la
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
ibins
- Beiträge: 3
- Registriert: 26.05.2013 13:37:06
Beitrag
von ibins » 27.05.2013 17:01:39
Vielen Dank für's Willkommen und für Eure Antworten.
Leider klappt's immer noch nicht, das Script "hängt" wenn ich es ausführe.
Naja, ich muss mich wohl mehr in die Materie einlesen
Jedenfalls Danke nochmal!
Michael
-
ibins
- Beiträge: 3
- Registriert: 26.05.2013 13:37:06
Beitrag
von ibins » 29.05.2013 09:10:43
Hallo nochmal,
ich bin vermutlich der Dümmste hier im Forum.
Das ursprünglich Script hat eh funktioniert, nur habe ich vergessen, dass mein Perl-Script eine Schleife eingebaut hat und ich auf einer zweiten Konsole das Ergebnis beobachten hätte sollen
Vielen Dankfür Eure Mühe.
Schöne Grüße
Michael