Hi zusammen.
Ich möchte einen "Überwachungsdämon" schreiben, der auf dem Zielsystem (Linux) andere Dämons startet und sobald diese aus irgendeinem Grund beendet werden, diese neu startet.
Bevor ich jetzt mein Daemon Grundgerüst groß umstricken, wollte ich fragen, ob jemand ein gutes Beispiel kennt, an dem ich mich für soetwas orientieren kann.
Es würde mir auch schon weiterhelfen, wenn mir jemand sagen kann, wie ich auf dem Zielsystem abfragen kann, ob ein Dienst noch aktiv ist und läuft. Sprich ich möchte feststellen, ob die Dienst abgeschmiert ist.
Danke schon mal für eure Kommentare und Hinweise im Voraus.
Greetz from 2bock
Einen Überwachungsdämon für Linux
Hoi,
tut mir leid, ich have von solchen Dingen keine rechte Ahnung. Im Moment habe ich auch andere Sachen zu tun. Aber ich finde Deine Idee sehr interessant und möchte Dich auch fragen, ob Du Dein Produkt teilen würdest? Ich könnte dann den beta-Tester machen .
Gruß,
Christian
tut mir leid, ich have von solchen Dingen keine rechte Ahnung. Im Moment habe ich auch andere Sachen zu tun. Aber ich finde Deine Idee sehr interessant und möchte Dich auch fragen, ob Du Dein Produkt teilen würdest? Ich könnte dann den beta-Tester machen .
Gruß,
Christian
Also wenn ich die Sorcen für diesen Daemon fertig habe, dann kann ich diese hier auch veröffentlichen.
Trozdem besteht zur Zeit die Problematik immer noch.
Greetz from 2bock
Trozdem besteht zur Zeit die Problematik immer noch.
Greetz from 2bock
hiermit kannst du schauen ob das programm läuft
http://www.python-forum.de/viewtopic.ph ... ght=server
und wenn du eine script hast mit dem du ein script
den befehl damit man python als daemon starten kann habe ich vergessen
wenn ich ihn finde melde ich mich.
mfg
http://www.python-forum.de/viewtopic.ph ... ght=server
und wenn du eine script hast mit dem du ein script
den befehl damit man python als daemon starten kann habe ich vergessen
wenn ich ihn finde melde ich mich.
mfg
python script.py 1&2>/dev/null &
disown python
http://www.python-forum.de/viewtopic.ph ... light=boot
mfg
disown python
http://www.python-forum.de/viewtopic.ph ... light=boot
mfg
-
- User
- Beiträge: 94
- Registriert: Freitag 12. September 2003, 07:58
- Wohnort: 50.9333300 / 6.3666700
Hallo alle zusammen. Also ich habe alles ausprobiert und es gibt scheinbar wirklich ur diese eine Lösung. Ich habe es nicht geschafft ohne dieses Dateihandlich auszukommen.
So aber ersteinaml der Reihe nach. Die Lösung besteht darin, das immer wenn auf einem Unix System ein Prozeß gestartet wird, das eine Pid Datei angelegt wird. In dieser steht nur die Nummer des Prozesses. Diese Dateien liegen im Normalfall im /var/run oder im /tmp/ Verzeichnis. Ich habe aber noch ein weiteres Verzeichnis gefunden, in dem zusätzliche Prozeßinformationen liegen. Ich meine das Verzeichnis proc im root verzeichnis. Dort befinden sich Ordner mit den Prozeßnummern als Ordnernamen.
Also hier zuersteinmal der Code um die Pid's zu bekommen. Übergeben werden muß der Name des Prozesses.
Z.B. Mein Skript heist TestDaemon.py
ich übergebe hier nur den Namen TestDaemon.
Wichtig. Wenn der Daemon erstellt wird, dann kann man vorgeben, wie die pid Datei heißt. Ich würde Vorschlagen sie TestDaemon.pid zu nennen. Dann funktioniert es auch mit dieser Funktion.
Im Code gibt es die Zeile Sie bewirkt, dass das mein Skript ausgeführt wird.
Den Daemon, den ich mit dieser Zeile starte steht auf dieser Seite.
http://aspn.activestate.com/ASPN/Cookbo ... cipe/66012
Also viel Spaß bis dann
Greetz from 2bock
So aber ersteinaml der Reihe nach. Die Lösung besteht darin, das immer wenn auf einem Unix System ein Prozeß gestartet wird, das eine Pid Datei angelegt wird. In dieser steht nur die Nummer des Prozesses. Diese Dateien liegen im Normalfall im /var/run oder im /tmp/ Verzeichnis. Ich habe aber noch ein weiteres Verzeichnis gefunden, in dem zusätzliche Prozeßinformationen liegen. Ich meine das Verzeichnis proc im root verzeichnis. Dort befinden sich Ordner mit den Prozeßnummern als Ordnernamen.
Also hier zuersteinmal der Code um die Pid's zu bekommen. Übergeben werden muß der Name des Prozesses.
Z.B. Mein Skript heist TestDaemon.py
ich übergebe hier nur den Namen TestDaemon.
Wichtig. Wenn der Daemon erstellt wird, dann kann man vorgeben, wie die pid Datei heißt. Ich würde Vorschlagen sie TestDaemon.pid zu nennen. Dann funktioniert es auch mit dieser Funktion.
Code: Alles auswählen
def getpid(name):
"""
get pid of running 'name'
"""
for fname in ('/var/run/' + name + '.pid', '/tmp/' + name + '.pid'):
#~ print fname
if os.path.isfile(fname):
f = open(fname)
uid = int(f.readline()[:-1])
f.close()
proc = '/proc/' + str(uid) + '/cmdline'
try:
if os.path.isfile(proc):
f = open(proc)
proc_arg = f.readline().split('\0')[:-1]
f.close()
else:
return fname, CONST_Error
except (OSError, IOError):
return fname, CONST_Error
try:
os.unlink(fname)
except OSError:
pass
return fname, CONST_Error
return fname, uid,proc_arg
return fname , CONST_Error
def start_stop_Daemon(action):
if action == 'stop':
for daemonName in daemonList:
if getpid(daemonName)[1] is 0:
if daemonName == 'daemon':
print 'python '+ daemonName + '.py' + ' stop'
os.popen3('python '+ daemonName + '.py' + ' stop')
print 'Process with pid ' + str(getpid(daemonName)[1]) + ' is stopped'
else:
for daemonName in daemonList:
if getpid(daemonName)[1] is 0:
if daemonName == 'daemon':
print 'python '+ daemonName + '.py' + ' start'
result = os.popen3('python '+ daemonName + '.py' + ' start')
print result
else:
print 'Process is running with pid ' + str(getpid(daemonName)[1]) + ' ' + str(getpid(daemonName)[2])
Code: Alles auswählen
os.popen3('python '+ daemonName + '.py' + ' start')
Den Daemon, den ich mit dieser Zeile starte steht auf dieser Seite.
http://aspn.activestate.com/ASPN/Cookbo ... cipe/66012
Also viel Spaß bis dann
Greetz from 2bock