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.
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])
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/Cookbook/Python/Recipe/66012
Also viel Spaß bis dann
Greetz from 2bock
