Prozess per Script überwachen?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Prozess per Script überwachen?

Beitrag von Bigmemo » 17.03.2009 00:23:57

Hallo,
ich möchte ein bestimmtes Prozess per Script überwachen und ggf. starten, falls dieser aus welchem Grund auch immer gestoppt wurde.
Wie kann ich ausserdem noch überprüfen aus welchem Grund der Prozess gestopt wurde? Wo stehen solche Ereignisse?
Leider reichen meine Kenntnisse nicht zum erstellen solch eines Scriptes. Über Vorschläge würde ich mich sehr freuen.
Auch Quellen zu Tutorials wären willkommen. Verwendet wird Debian Lenny.

THX
Bigmemo

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Prozess per Script überwachen?

Beitrag von Duff » 17.03.2009 07:47:22

Hallo,

um was für einen Prozess geht es denn hier?

Überwachen könntest du den Prozess mit Hilfe von ps -ef|grep -v grep|grep <Prozessname>. Aber vielleicht hat der Prozess ja auch noch ein eigenes Logfile, welches man überwachen könnte.


Gruß,
Daniel
Oh, yeah!

Benutzeravatar
Jerry
Beiträge: 665
Registriert: 01.09.2006 08:36:45
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home

Re: Prozess per Script überwachen?

Beitrag von Jerry » 17.03.2009 08:36:36

Code: Alles auswählen

#!/bin/sh
#--------------------------------------------------------------------
# /bin/service-restart.sh - Run service in a loop
#
# Creation:    08.02.2003 tobig
# Last Update: $Id: service-restart.sh,v 1.1 2003/02/09 00:26:42 tobig Exp $
#--------------------------------------------------------------------

if [ "$#" -lt 2 ]
then
  echo "Syntax: $0 <sleeptime> <programm> [arg1] ..."
  exit 1
fi

sleeptime="$1"
shift

if echo "$sleeptime" | grep -v "^[0-9]" > /dev/null
then
  echo "Error: Sleep time is not a number!"
  exit 1
fi

if [ ! -f "$1" ]
then
  echo "Error: Executable of service not found!"
  exit 1
fi

trap "" 1

while [ 1 ]
do
  $1 "$2" "$3" "$4" "$5"
  sleep "$sleeptime"
done	
Du kannst ja obiges kleines Script verwenden, hab ich mal irgendwo gefunden.

Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)

yeti

Re: Prozess per Script überwachen?

Beitrag von yeti » 17.03.2009 09:57:50

Der Status von "kill -0 $PID" kann benutzt werden, um festzustellen, ob Prozeß $PID noch lebt.

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Prozess per Script überwachen?

Beitrag von Duff » 17.03.2009 10:08:15

@Jerry: Das Skript läßt, wie der Name schon sagt, einen Prozess in einer Schleife laufen. Sprich, wenn ich z.B. ein gnome-terminal überwachen möchte, würde durch den Prozess immer wieder im Zeitinterval sleeptime ein neuer gnome-terminal-Prozess gestartet.
Oh, yeah!

Benutzeravatar
Jerry
Beiträge: 665
Registriert: 01.09.2006 08:36:45
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home

Re: Prozess per Script überwachen?

Beitrag von Jerry » 17.03.2009 10:40:18

Nein. Erst wenn sich Prozess beendet dann greift die sleeptime und der Prozess wird wieder gestartet.

Gruß
Wolf

Edit: Gnome-Terminal verhält sich wirklich anders, mit dem mc zb. geht es wie beschrieben.
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 17.03.2009 11:30:58

Hallo,

zuerst möchte ich mich für die Vorschläge bedanken. Ich bin sehr positiv Überrascht, über die rege Bereitschaft zu helfen. :)

Nun der Prozess ist ein "Programm" und wird durch ./Programm gestartet. Es kommt ab und zu vor, das dieses Programm nicht mehr existent ist, wenn ich in der Konsule "ps ax" eingebe. Dann starte ich wieder händisch und alles ist in Ordnung.

Da ich nicht immer auf den Rechner zugreifen kann, wollte ich das ganze durch ein Script erledigen lassen.

Nun zum Script von @Jerry
wo muss man im Script den Programmnamen eintragen? Übrigens ist Debian ganz nackt installiert, ohne Oberfläche, nur Netzwerk und SSH ist installiert, fungiert quasi als Server.

THX
Bigmemo

Benutzeravatar
Jerry
Beiträge: 665
Registriert: 01.09.2006 08:36:45
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home

Re: Prozess per Script überwachen?

Beitrag von Jerry » 17.03.2009 11:41:10

Bigmemo hat geschrieben: Nun zum Script von @Jerry
wo muss man im Script den Programmnamen eintragen? Übrigens ist Debian ganz nackt installiert, ohne Oberfläche, nur Netzwerk und SSH ist installiert, fungiert quasi als Server.

THX
Bigmemo
Eintragen mußt du da nichts, nur aufrufen.

Code: Alles auswählen

echo "Syntax: $0 <sleeptime> <programm> [arg1] ..."
zB. so:
restart_service 1 dein_programm argument1 argument2 usw

Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 17.03.2009 15:33:37

Jerry hat geschrieben: Eintragen mußt du da nichts, nur aufrufen.

Code: Alles auswählen

echo "Syntax: $0 <sleeptime> <programm> [arg1] ..."
zB. so:
restart_service 1 dein_programm argument1 argument2 usw

Gruß
Wolf
@Jerry
was heisst aufrufen? Muss ich das Script händisch aufrufen oder wie? Sorry, ich komme jetzt nicht ganz mit.
Eine Bitte, ist es möglich das Script mit Stichworten zu kommentieren, so weiss ich wenigstens wo ich was mache?

z.B.:

Code: Alles auswählen

if [ "$#" -lt 2 ]      // hier wird ... abgefragt
then                  // dann ...
  echo "Syntax: $0 <sleeptime> <programm> [arg1] ..."        // was passiert hier???
  exit 1              // verlasse mit exit 1 --> was bedeutet exit 1
fi
THX
Bigmemo

Benutzeravatar
Jerry
Beiträge: 665
Registriert: 01.09.2006 08:36:45
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /home

Re: Prozess per Script überwachen?

Beitrag von Jerry » 17.03.2009 18:28:36

Bigmemo hat geschrieben: @Jerry
was heisst aufrufen? Muss ich das Script händisch aufrufen oder wie? Sorry, ich komme jetzt nicht ganz mit.
Na wie ich es schon schrieb, das Script unter einem beliebigem Namen speichern, z.B. restart_service, dann mit chmod +x restart_service ausführbar machen.
Nun kannst du das script (als root) z.b. nach /usr/local/bin kopieren. Zum Schluß aufrufen als "restart_service 1 dein_programm dein_argument ...."

Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)

yeti

Re: Prozess per Script überwachen?

Beitrag von yeti » 17.03.2009 19:06:07

Wie wär's mal mit "man 5 inittab"?

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 17.03.2009 20:16:32

Hallo,

Ok, das heisst das Script läuft ständig und wenn "mein_Programm" nicht mehr existent ist, wird es sofort wieder gestartet!

THX
Bigmemo

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Re: Prozess per Script überwachen?

Beitrag von Duff » 18.03.2009 08:53:28

Im Prinzip ja. Liegt nun mal daran, wie du die Variable sleeptime setzt ;-)
Oh, yeah!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Prozess per Script überwachen?

Beitrag von rendegast » 18.03.2009 09:50:30

Das init-System (sysv) könnte ausgetauscht werden.
Es gibt welche, die Prozesse gegebenenfalls neu starten.

Jedoch sind da oft die Startskripte/-befehle stark vereinfacht und müssen kontrolliert bzw. eventuell angepaßt werden,
zBsp hinsichtlich Tests oder Fehlerbehandlung.
Neuere Versionen von zBsp. init-ng verwenden teilweise aber auch einfach Kopien der sysv-Startskripte.

Jedenfalls ist da Einarbeitung und Verständnis des Startsystems gefragt.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 18.03.2009 13:52:22

Hallo,

danke an Alle und für die Tips, werde den Script am WE testen.

THX
Bigmemo

Benutzeravatar
LessWire
Beiträge: 558
Registriert: 21.11.2004 04:36:04
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Bavaria

Re: Prozess per Script überwachen?

Beitrag von LessWire » 19.03.2009 02:44:37

Noch eine kürzere Alternative (allerdings nicht getestet):

Code: Alles auswählen

while [ 1 ]; do
    /bin/ps --no-headers -C deinprogramm || ( /verzeichnis/deinprogramm & )
    # z. B. alle 60 sek pruefen:
    sleep 60
done
vg, LW
at ~ now.

yeti

Re: Prozess per Script überwachen?

Beitrag von yeti » 19.03.2009 03:53:13

LessWire hat geschrieben:

Code: Alles auswählen

while [ 1 ]; do
    /bin/ps --no-headers -C deinprogramm || ( /verzeichnis/deinprogramm & )
    # z. B. alle 60 sek pruefen:
    sleep 60
done
"while : ; do" reicht als Schleifenstart und wenn das zu überwachende Programm eventuëll unter anderen Usern auch oder gar mehrfach läuft, ist es sinniger es erst zu starten (/your/path/and/prog &), sich die PID genau dieser Inkarnation zu merken (PID=$!) und nur diese zu überwachen. Hierbei kann dann das "wait"-Kommandio der Shell eingestzt werden (wait $PID).

Benutzeravatar
LessWire
Beiträge: 558
Registriert: 21.11.2004 04:36:04
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Bavaria

Re: Prozess per Script überwachen?

Beitrag von LessWire » 22.03.2009 06:17:15

danke yeti für die professionelle ergänzung!
at ~ now.

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 07.04.2009 04:15:25

Hallo,

leider konnte ich erst jetzt testen, hatte aber Probleme :( ...

meine Eingabe:
./restart_service 1 ./mein_Programm ohne Parameter...
script läuft soweit, aber es wird ständig "mein_Programm" gestartet. Innerhalb einigen Sekunden habe ich mindestens 15-20 X "mein_Programm" am laufen...Schleife???Dadurch auch keine Funktion...
das heisst ich bräuchte doch eine Abfrage, ob "mein_Programm" läuft oder nicht...wie könnte man so etwas verwirklichen?

THX
Bigmemo

yeti

Re: Prozess per Script überwachen?

Beitrag von yeti » 07.04.2009 04:57:59

Code: Alles auswählen

(yeti@xs3:2)/home/tmp$ cat merlin
#!/bin/bash
#
# merlin commando
#
# eine überprüfung auf korrekten aufruf findet nicht statt
#
# beispiel:
#
#       ./merlin ./arthur
#
#               startet programm arthur und wenn er stirbt, wird er sofort
#               wiederbelebt.
#               harmlose magie halt... :-)
#
while : ; do
        echo $(date +'%F %T %Z') start $1
        $1 &
        echo $(date +'%F %T %Z') auf ableben von $1 warten
        wait $!
done
(yeti@xs3:2)/home/tmp$ cat arthur
#!/bin/bash
#
# arthur startet lediglich und beendet sich nach einer zufälligen zeit
# aus dem bereich 10 bis 30 sekunden.
#
# arthur soll nur als testprogramm für merlin dienen.

sleep $((RANDOM%20+10))
(yeti@xs3:2)/home/tmp$ ./merlin ./arthur 
2009-04-07 04:49:16 CEST start ./arthur
2009-04-07 04:49:16 CEST auf ableben von ./arthur warten
2009-04-07 04:49:39 CEST start ./arthur
2009-04-07 04:49:39 CEST auf ableben von ./arthur warten
2009-04-07 04:49:52 CEST start ./arthur
2009-04-07 04:49:52 CEST auf ableben von ./arthur warten
2009-04-07 04:50:04 CEST start ./arthur
2009-04-07 04:50:04 CEST auf ableben von ./arthur warten
2009-04-07 04:50:25 CEST start ./arthur
2009-04-07 04:50:25 CEST auf ableben von ./arthur warten
^C  (((<--- Strg-C getippt zwecks Abbruch von merlin)))

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 07.04.2009 22:29:07

Hallo,

@yeti
heisst das ich speichere den 6 zeiler als script mach es ausführbar und starte einfach: ./script ./meinProgramm
sorry das ich solche fagen stelle aber bin nun mal ein newbie... :oops:

[edit on]
@yeti
habe dein Script getestet...Ergebnis ist das innerhalb kürzester Zeit sehr viele von meinem Programm gestartet wurden... :?
[edit off]

THX
Bigmemo

yeti

Re: Prozess per Script überwachen?

Beitrag von yeti » 08.04.2009 02:50:55

Bigmemo hat geschrieben:habe dein Script getestet...Ergebnis ist das innerhalb kürzester Zeit sehr viele von meinem Programm gestartet wurden... :?
Es gibt böse Dämönchen, die sich nach dem Start selbst nochmal in anderer Weise selbst neustarten, um z.B. irgendwelche I/O-Kanäle kontrolliert loszuwerden oder anderen Spökes zu veranstalten.

Mit solchen pöchen Purchen (chtocht chie chu Poten!!!) kann mein Vorschlag durchaus auf die Nase fallen, weil das Warten auf das Ende der gestarteten Instanz dann schnell eintritt und eine ganz andere Instanz weiterläuft und "Merlin" dann noch einen "Arthur" wiedererweckt...

Dann schau mal nach, ob ./DeinProgramm soetwas hat, wie eine Option, ein "PIDFile" anzulegen oder "RUNFile" könnte es vielleicht auch in der Doku heißen...

Oder laß man 'ne URL auf die Doku des unheimlichen Programmes hier fallen...

...irgendwie kommt mir das langsam vor wie mittelalterliche Gynäkologie... im Dunklen rumtasten, ja nicht Irgendwas sehen dürfen, aber heilen sollen...

Bigmemo
Beiträge: 13
Registriert: 09.02.2009 02:52:35

Re: Prozess per Script überwachen?

Beitrag von Bigmemo » 08.04.2009 04:43:43

hallo,

@yeti
kann leider kein URL angeben...auch habe ich das Programm jetzt nicht mehr...wurde durch eine andere ersetzt...somit hat sich es erledigt...

THX
Bigmemo

yeti

Re: Prozess per Script überwachen?

Beitrag von yeti » 08.04.2009 04:54:49

Bigmemo hat geschrieben:kann leider kein URL angeben...auch habe ich das Programm jetzt nicht mehr...wurde durch eine andere ersetzt...somit hat sich es erledigt...
Ich bin total begeistert... :P

Antworten