Prozess per Script überwachen?
Prozess per Script überwachen?
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
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
Re: Prozess per Script überwachen?
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
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!
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Prozess per Script überwachen?
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
Gruß
Wolf
Selbst der längste Weg beginnt mit dem ersten Schritt Lao Tse (~ 600-400 v. Chr.)
Re: Prozess per Script überwachen?
Der Status von "kill -0 $PID" kann benutzt werden, um festzustellen, ob Prozeß $PID noch lebt.
Re: Prozess per Script überwachen?
@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!
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Prozess per Script überwachen?
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.
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.)
Re: Prozess per Script überwachen?
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
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
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Prozess per Script überwachen?
Eintragen mußt du da nichts, nur aufrufen.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
Code: Alles auswählen
echo "Syntax: $0 <sleeptime> <programm> [arg1] ..."
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.)
Re: Prozess per Script überwachen?
@JerryJerry hat geschrieben: Eintragen mußt du da nichts, nur aufrufen.zB. so:Code: Alles auswählen
echo "Syntax: $0 <sleeptime> <programm> [arg1] ..."
restart_service 1 dein_programm argument1 argument2 usw
Gruß
Wolf
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
Bigmemo
- Jerry
- Beiträge: 665
- Registriert: 01.09.2006 08:36:45
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: /home
Re: Prozess per Script überwachen?
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.Bigmemo hat geschrieben: @Jerry
was heisst aufrufen? Muss ich das Script händisch aufrufen oder wie? Sorry, ich komme jetzt nicht ganz mit.
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.)
Re: Prozess per Script überwachen?
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
Ok, das heisst das Script läuft ständig und wenn "mein_Programm" nicht mehr existent ist, wird es sofort wieder gestartet!
THX
Bigmemo
Re: Prozess per Script überwachen?
Im Prinzip ja. Liegt nun mal daran, wie du die Variable sleeptime setzt
Oh, yeah!
Re: Prozess per Script überwachen?
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.
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")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: Prozess per Script überwachen?
Hallo,
danke an Alle und für die Tips, werde den Script am WE testen.
THX
Bigmemo
danke an Alle und für die Tips, werde den Script am WE testen.
THX
Bigmemo
- LessWire
- Beiträge: 558
- Registriert: 21.11.2004 04:36:04
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Bavaria
Re: Prozess per Script überwachen?
Noch eine kürzere Alternative (allerdings nicht getestet):
vg, LW
Code: Alles auswählen
while [ 1 ]; do
/bin/ps --no-headers -C deinprogramm || ( /verzeichnis/deinprogramm & )
# z. B. alle 60 sek pruefen:
sleep 60
done
at ~ now.
Re: Prozess per Script überwachen?
"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).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
Re: Prozess per Script überwachen?
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
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
Re: Prozess per Script überwachen?
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)))
Re: Prozess per Script überwachen?
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...
[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
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...
[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
Re: Prozess per Script überwachen?
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.Bigmemo hat geschrieben:habe dein Script getestet...Ergebnis ist das innerhalb kürzester Zeit sehr viele von meinem Programm gestartet wurden...
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...
Re: Prozess per Script überwachen?
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
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
Re: Prozess per Script überwachen?
Ich bin total begeistert...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...