programa interprete idle ejecutar desde cómo consola compilar archivos archivo python scripting daemon

interprete - idle python



¿Cuál sería la forma más simple de demonizar una secuencia de comandos python en Linux? (5)

Si no le importan los debates reales (que tienden a ser extraoficiales y no ofrecen una respuesta autorizada), puede elegir alguna biblioteca que le facilite la tarea. Recomiendo echar un vistazo a ll-xist , esta biblioteca contiene una gran cantidad de código de salvamento, como cron jobs helper, daemon framework y (lo que no es interesante para ti, pero es realmente genial) XSL orientado a objetos ( ll-xist sí mismo).

¿Cuál sería la forma más simple de demonizar una secuencia de comandos python en Linux? Necesito que esto funcione con todos los sabores de Linux, por lo que solo debería usar herramientas basadas en Python.




Vea a Stevens y también este extenso hilo en el estado activo, que me pareció personalmente incorrecto y muy verboso, y se me ocurrió esto:

from os import fork, setsid, umask, dup2 from sys import stdin, stdout, stderr if fork(): exit(0) umask(0) setsid() if fork(): exit(0) stdout.flush() stderr.flush() si = file(''/dev/null'', ''r'') so = file(''/dev/null'', ''a+'') se = file(''/dev/null'', ''a+'', 0) dup2(si.fileno(), stdin.fileno()) dup2(so.fileno(), stdout.fileno()) dup2(se.fileno(), stderr.fileno())

Si necesita detener ese proceso nuevamente, se requiere conocer el pid, la solución habitual para esto es pidfiles. Haz esto si necesitas uno

from os import getpid outfile = open(pid_file, ''w'') outfile.write(''%i'' % getpid()) outfile.close()

Por razones de seguridad, puede considerar cualquiera de estos después de demonizar

from os import setuid, setgid, chdir from pwd import getpwnam from grp import getgrnam setuid(getpwnam(''someuser'').pw_uid) setgid(getgrnam(''somegroup'').gr_gid) chdir(''/'')

También podría usar nohup pero eso no funciona bien con el módulo de subproceso de python


Recientemente utilicé Turkmenbashi :

$ easy_install turkmenbashi import Turkmenbashi class DebugDaemon (Turkmenbashi.Daemon): def config(self): self.debugging = True def go(self): self.debug(''a debug message'') self.info(''an info message'') self.warn(''a warning message'') self.error(''an error message'') self.critical(''a critical message'') if __name__=="__main__": d = DebugDaemon() d.config() d.setenv(30, ''/var/run/daemon.pid'', ''/tmp'', None) d.start(d.go)