Python Daemon stoppen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sn0000py
User
Beiträge: 6
Registriert: Donnerstag 14. Mai 2015, 07:32

Hallo ich versuche gerade einen kleinen Python Daemon zu schreiben ...

Das starten und so funktioniert schon gut, nur ich möchte gerne wenn ich den Daemon stoppe, ein paar scahen machen (Socket schließen usw.)

Starten tue ich so : ./led.py start
Stoppen : ./led.py stop

Code: Alles auswählen

from daemon import runner

class App():
	def __init__(self):
		print 'init2'
		self.stdin_path = '/dev/null'
		self.stdout_path = '/dev/tty'
		self.stderr_path = '/dev/tty'
		self.pidfile_path =  '/tmp/foo.pid'
		self.pidfile_timeout = 5
		self.verbose = 10
	def stop(self):
		print 'Stopping ...'
		global doKill
		doKill = True
	def handle_exit(self, signum, frame):
		print 'Handle Exit'
	def terminate(self, signal_number, stack_frame):
		print 'Terminate'
	def run(self):
		print 'run'
                thread.start_new_thread(serverSocket, ())
		while True:
			strip.setPixelColor(0, Color(0,0,0))
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
zum beispiel starte ich da enen Thread der einen Socket öffnet ... möchte sowohl den Thread als auch den Socket der da drinnen geöffnet wird wieder schließen .

danke :D
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@sn0000py
Schau' Dir mal das signal Modul an. Damit kannst Du einen handler definieren, der ausgeführt wird, wenn ein bestimmtes Signal bei Deinem Script landet.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
sn0000py
User
Beiträge: 6
Registriert: Donnerstag 14. Mai 2015, 07:32

danke

hat gefunkt :D
BlackJack

@sn0000py: Erst einmal ein Hinweis auf den Style Guide for Python Code.

Dann ist ``global`` Böse™. Insbesondere in einer Klasse hat das gar nichts zu suchen, denn Klassen verwendet man um diesen Mist loszuwerden.

Die `run()`-Methode ist keine. Da wird nichts von dem Objekt benutzt, das könnte einfach eine Funktion sein.

Das `thread`-Modul sollte nicht mehr verwendet werden, das ist in Python 3 kein Teil der öffentlichen API mehr und auch in Python 2 gibt es schon seit einer Ewigkeit das `threading`-Modul als Ablösung.
Antworten