View previous topic :: View next topic |
Author |
Message |
xraver Veteran


Joined: 20 Aug 2003 Posts: 1083 Location: Halberstadt
|
Posted: Mon Oct 01, 2007 12:16 pm Post subject: Script(meister) gesucht - Prozess neu starten wenn tot |
|
|
Hallo,
ich hab da ein kleines Problem. Ich habe ein Programm laufen was manchmal zu abstürzen neigt.
Bis ich das Problem gelöst habe möchte ich das das Programm neu gestartet wird wenn es mal wieder abgerschmiert ist.
Ich denke das sollte mit ein par Zeilen Bash-Code möglich sein - jedoch weiss ich nun gar nicht wo ich da ansetzen soll.
Ich dachte da einen Cron-Job der jede Minute checkt ob das Programm läuft.
Wenn ich aber z.b ein ps ax | grep <mein_programm> mache, dann kann ich echo $? nicht auswerten weill grep ja was gefunden gefunden hat - sich selber.
Wie kann ich überprüfen ob der Prozess noch läuft und diesen gegebenfalls neu starten wenn er nicht mehr läuft? |
|
Back to top |
|
 |
Necoro Veteran


Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Mon Oct 01, 2007 12:18 pm Post subject: |
|
|
benutze anstatt "ps ax | grep" einfach "pgrep" :
Code: | if pgrep -x $PROGRAMM > /dev/null; then
# restart
fi |
(das -x sagt "exact" ... ansonsten würde "pgrep foo" auch auf das programm "foobar" passen) _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
 |
schachti Advocate


Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Oct 01, 2007 12:27 pm Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot |
|
|
xraver wrote: |
Ich dachte da einen Cron-Job der jede Minute checkt ob das Programm läuft.
|
Starte doch das Programm über ein Skript:
Code: |
#!/bin/bash
while true; do
DEIN_PROGRAMM
sleep 1s
done
|
_________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
 |
Necoro Veteran


Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Mon Oct 01, 2007 12:32 pm Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot |
|
|
schachti wrote: | xraver wrote: |
Ich dachte da einen Cron-Job der jede Minute checkt ob das Programm läuft.
|
Starte doch das Programm über ein Skript:
Code: |
#!/bin/bash
while true; do
DEIN_PROGRAMM
sleep 1s
done
|
|
Und wie machst du das, wenn du das Programm beenden willst? - denn musst du vorher das skript killen, was auch nicht die beste lösung ist ... _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
 |
xraver Veteran


Joined: 20 Aug 2003 Posts: 1083 Location: Halberstadt
|
Posted: Mon Oct 01, 2007 12:33 pm Post subject: |
|
|
Necro, funktioniert leider nicht.
Code: |
#!/bin/bash
if $(pgrep murmur); then
cd /root/mumble-1.0.0/release/
./murmur -ini /root/mumble-1.0.0/scripts/murmur.ini
fi
|
Mal schauen ob schachtis Lösung funktioniert. |
|
Back to top |
|
 |
schachti Advocate


Joined: 28 Jul 2003 Posts: 3765 Location: Gifhorn, Germany
|
Posted: Mon Oct 01, 2007 12:37 pm Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot |
|
|
Necoro wrote: | Und wie machst du das, wenn du das Programm beenden willst? - denn musst du vorher das skript killen, was auch nicht die beste lösung ist ... |
Ob ich ein kill an das Skript sende oder den cronjob rausnehme ist kein großer Unterschied im Aufwand. Bei der Scriptlösung hat man dagegen den Vorteil, dass das Programm möglichst schnell wieder gestartet wird (nach genau 1 Sekunde, wenn man will sogar ohne diese Verzögerung), während es bei der cronjob-Lösung im Durchschnitt 30 Sekunden dauert. _________________ Never argue with an idiot. He brings you down to his level, then beats you with experience.
How-To: Daten verschlüsselt auf DVD speichern. |
|
Back to top |
|
 |
toralf Developer


Joined: 01 Feb 2004 Posts: 3943 Location: Hamburg
|
Posted: Mon Oct 01, 2007 12:38 pm Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot |
|
|
Necoro wrote: | schachti wrote: | xraver wrote: |
Ich dachte da einen Cron-Job der jede Minute checkt ob das Programm läuft.
|
Starte doch das Programm über ein Skript:
Code: |
#!/bin/bash
while true; do
DEIN_PROGRAMM
sleep 1s
done
|
|
Und wie machst du das, wenn du das Programm beenden willst? - denn musst du vorher das skript killen, was auch nicht die beste lösung ist ... | Dann killt man entweder das Script oder arbeitet mit einer Start/Stopp-Datei a'la Code: | [[-f stop_it_now ]] && exit |
|
|
Back to top |
|
 |
xraver Veteran


Joined: 20 Aug 2003 Posts: 1083 Location: Halberstadt
|
Posted: Mon Oct 01, 2007 12:44 pm Post subject: |
|
|
Ok, schachti seine Lösung funktioniert super .
Da der Service eh dauert laufen soll brauch ich keine Option zum Stoppen - im Notfall kill ich eben das Script.
Bis das Prob mit Murmur gelöst ist reicht dieser Flicken.
Das gute ist auch, die Benutzer merken gar nicht das der Server down war weill Mumble auch gleich wieder connectet.
Ein Fettes Danke an euch! |
|
Back to top |
|
 |
Necoro Veteran


Joined: 18 Dec 2005 Posts: 1912 Location: Germany
|
Posted: Mon Oct 01, 2007 12:47 pm Post subject: |
|
|
xraver wrote: | Necro, funktioniert leider nicht.
Code: |
#!/bin/bash
if $(pgrep murmur); then
cd /root/mumble-1.0.0/release/
./murmur -ini /root/mumble-1.0.0/scripts/murmur.ini
fi
|
Mal schauen ob schachtis Lösung funktioniert. |
Jo - war mir auch aufgefallen ... hatte auch meinen Post schon korrigiert Leider zu spät ^^ _________________ Inter Deum Et Diabolum Semper Musica Est. |
|
Back to top |
|
 |
Knieper l33t

Joined: 10 Nov 2005 Posts: 846
|
Posted: Mon Oct 01, 2007 4:01 pm Post subject: |
|
|
Es gibt einige Programme, die genau das machen, zB. http://cr.yp.to/daemontools/supervise.html (und Link run -> Programm). _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
 |
c_m Guru


Joined: 29 Jun 2005 Posts: 358
|
Posted: Mon Oct 01, 2007 9:05 pm Post subject: |
|
|
hab mal für nen anderes problem nen kleinen Shell Dämon geschrieben (siehe HIER)
den leicht anpassen (in der endlosschleife) und man kann ihn leicht starten/stoppen. Musst nur ein wenig anpassen, dass er das macht was du willst + den Namen des PID-Files anpassen.
pw: mann muss ihn afair mit & aufrufen, ansonsten läuft er im vordergrund ^^ (hat noch wer ne Idee wie man das umgehen kann??) _________________ This must be thursday ... |
|
Back to top |
|
 |
xraver Veteran


Joined: 20 Aug 2003 Posts: 1083 Location: Halberstadt
|
Posted: Fri Oct 05, 2007 9:58 am Post subject: |
|
|
Hallo,
nach ein par Tagen stellte ich ein par Probleme fest.
Der Code Code: | while true; do
DEIN_PROGRAMM
sleep 1s
done | funktioniert zwar, aber startet mein Programm mehrmals. Sogar so oft das die MySQL Datenbank das kotzen bekam und die ganze Performance des Server in den Keller ging.
Bei genauer Betrachtung in der Shell von
Code: | ~ $ while true; do
> echo test
> sleep 1
> done
|
wird im Sekundentakt ein Test ausgegeben. Schachti, wo checkt dein Code ob $PROGRAMM noch läuft?
Ich hab mich zwar schon am ersten Tag gewundert, aber es lief ja. Ich hätte den Code nicht blind nehmen sollen .
Necro, auch dein Code will nicht so richtig.
Nun hab ich mir folgende Möglichkeit gebastelt die schachti´s und Necoro´s Lösung vereint .
Code: | test() {
MURMUR=`pgrep -x murmur`
if [ "$MURMUR" == "" ]; then
echo tot
# start programm
fi
}
while true; do
test
sleep 3s
done |
|
|
Back to top |
|
 |
Knieper l33t

Joined: 10 Nov 2005 Posts: 846
|
Posted: Fri Oct 05, 2007 11:52 am Post subject: |
|
|
Ich verstehe das Rumgeraffel nicht. Nimm supervise (benoetigt mit dietlibc <20k Speicher), das tut genau das und besser als Dein komisches Skript, das in einer kompletten Shell laeuft.
Zu Schachtis Code: Dein Programm laeuft wahrsch. im Hintergrund, daher iteriert die Schleife weiter. Dein "echo" hilft da wenig, da es ja sofort beendet wird -> iteriert ebenfalls weiter. _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
 |
xraver Veteran


Joined: 20 Aug 2003 Posts: 1083 Location: Halberstadt
|
Posted: Fri Oct 05, 2007 12:12 pm Post subject: |
|
|
Knieper wrote: | Ich verstehe das Rumgeraffel nicht. Nimm supervise (benoetigt mit dietlibc <20k Speicher), das tut genau das und besser als Dein komisches Skript, das in einer kompletten Shell laeuft.
|
Waa ist an dem Script komisch?
Auf dem Server läuft Debian und dort ist supervise nicht im Softwaretree enthalten.
Auf deiner angegeben URL konnte ich auch nicht sofort den SourceCode finden.
Ob ich nun lokal Portage frage wo der SourceCode liegt und die dann auf dem Server Compiliere oder eben ein "komisches" Script baue.
Letztendlich betreibe ich das "Rumgeraffel" hier im Forum um den beiden mitzuteilen das ihre Lösung nicht funktioniert hat und um meine Lösung vorzustellen. Ausserdem loggt das Script nun mit, wenn mal wieder der Prozess abgeraucht ist. Ich bin mit dem Script also flexibler.
Desweiteren bietet mir ein wenig Shellscripting einen gewissen Lerneffekt.
Und ich würde es sogar in python coden nur um zu wissen wie ich das Problem in python lösen könnte.
Doch dann würde ich wirklich mit Kanonen auf Spatzen schießen.
Knieper wrote: |
Zu Schachtis Code: Dein Programm laeuft wahrsch. im Hintergrund, daher iteriert die Schleife weiter. Dein "echo" hilft da wenig, da es ja sofort beendet wird -> iteriert ebenfalls weiter. |
Ja, ich habe es wirklich im Hintergrund laufen lassen. Wieder etwas dazu gelernt - so mag ich es . |
|
Back to top |
|
 |
Knieper l33t

Joined: 10 Nov 2005 Posts: 846
|
Posted: Sat Oct 06, 2007 1:27 pm Post subject: |
|
|
xraver wrote: | Waa ist an dem Script komisch? |
Kleines Bsp.: Dein Server ist tot und ein Nutzer startet ein Programm mit demselben Namen -> Dein Server bleibt tot.
Quote: | Auf dem Server läuft Debian und dort ist supervise nicht im Softwaretree enthalten. |
Es ist bei den Daemontools dabei. _________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
 |
|