Perlscript mit Bashscript ausführen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ibins
Beiträge: 3
Registriert: 26.05.2013 13:37:06

Perlscript mit Bashscript ausführen

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

Re: Perlscript mit Bashscript ausführen

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:

Code: Alles auswählen

*/10 * * * * /tmp/checksleep
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

Re: Perlscript mit Bashscript ausführen

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

Re: Perlscript mit Bashscript ausführen

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

Re: Perlscript mit Bashscript ausführen

Beitrag von wanne » 26.05.2013 15:41:33

Edit: das geht eigentlich viel simpler:

Code: Alles auswählen

while [ 1 ]
  do perl /pfad/waagen.pl
done
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

Re: Perlscript mit Bashscript ausführen

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

Code: Alles auswählen

while :; do
	/pfad/waagen.pl
	sleep 1;
done
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

Re: Perlscript mit Bashscript ausführen

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

Re: Perlscript mit Bashscript ausführen

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 :oops:

Vielen Dankfür Eure Mühe.

Schöne Grüße
Michael

Antworten