Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Script(meister) gesucht - Prozess neu starten wenn tot
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
xraver
Veteran
Veteran


Joined: 20 Aug 2003
Posts: 1083
Location: Halberstadt

PostPosted: Mon Oct 01, 2007 12:16 pm    Post subject: Script(meister) gesucht - Prozess neu starten wenn tot Reply with quote

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
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: Germany

PostPosted: Mon Oct 01, 2007 12:18 pm    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Oct 01, 2007 12:27 pm    Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot Reply with quote

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
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: Germany

PostPosted: Mon Oct 01, 2007 12:32 pm    Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot Reply with quote

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
View user's profile Send private message
xraver
Veteran
Veteran


Joined: 20 Aug 2003
Posts: 1083
Location: Halberstadt

PostPosted: Mon Oct 01, 2007 12:33 pm    Post subject: Reply with quote

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
View user's profile Send private message
schachti
Advocate
Advocate


Joined: 28 Jul 2003
Posts: 3765
Location: Gifhorn, Germany

PostPosted: Mon Oct 01, 2007 12:37 pm    Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot Reply with quote

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
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3943
Location: Hamburg

PostPosted: Mon Oct 01, 2007 12:38 pm    Post subject: Re: Script(meister) gesucht - Prozess neu starten wenn tot Reply with quote

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
View user's profile Send private message
xraver
Veteran
Veteran


Joined: 20 Aug 2003
Posts: 1083
Location: Halberstadt

PostPosted: Mon Oct 01, 2007 12:44 pm    Post subject: Reply with quote

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
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: Germany

PostPosted: Mon Oct 01, 2007 12:47 pm    Post subject: Reply with quote

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
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Mon Oct 01, 2007 4:01 pm    Post subject: Reply with quote

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
View user's profile Send private message
c_m
Guru
Guru


Joined: 29 Jun 2005
Posts: 358

PostPosted: Mon Oct 01, 2007 9:05 pm    Post subject: Reply with quote

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
View user's profile Send private message
xraver
Veteran
Veteran


Joined: 20 Aug 2003
Posts: 1083
Location: Halberstadt

PostPosted: Fri Oct 05, 2007 9:58 am    Post subject: Reply with quote

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
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Fri Oct 05, 2007 11:52 am    Post subject: Reply with quote

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
View user's profile Send private message
xraver
Veteran
Veteran


Joined: 20 Aug 2003
Posts: 1083
Location: Halberstadt

PostPosted: Fri Oct 05, 2007 12:12 pm    Post subject: Reply with quote

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
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Sat Oct 06, 2007 1:27 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum