¿Cuál sería la forma más sencilla 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.¿Cuál sería la forma más simple de demonizar una secuencia de comandos python en Linux?
Respuesta
Ver Stevens y también esta lengthy thread on activestate que encontré personalmente para ser a la vez su mayor parte incorrecta y mucho que verbosa, 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 Es necesario detener el proceso nuevamente, se requiere conocer el pid, la solución habitual para esto es pidfiles. Para ello, si lo necesita
from os import getpid
outfile = open(pid_file, 'w')
outfile.write('%i' % getpid())
outfile.close()
Por razones de seguridad que podría 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 es posible usar nohup pero que no funciona bien con python's subprocess module
Uso grizzled.os.daemonize :
$ easy_install grizzled
>>> from grizzled.os import daemonize
>>> daemon.daemonize()
Para saber cómo funciona esto o para hacerlo usted mismo, lea the discussion on ActiveState.
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. Recomendaría echar un vistazo a ll-xist, esta biblioteca contiene una gran cantidad de código salvavidas, como cron jobs helper, daemon framework, y (lo que no es interesante para usted, pero es realmente genial) orientado a objetos XSL (ll-xist sí mismo).
Eso es un kit de biblioteca interesante, lo intentaré. Gracias. – edomaur
he utilizado recientemente 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)
- 1. ¿Cuál es la forma más simple de usar SSH Python?
- 2. ¿Cuál es la forma más sencilla de colocar una secuencia de comandos python en la bandeja del sistema (Windows)
- 3. La mejor manera de demonizar la aplicación Java en Linux
- 4. ¿Cuál es la forma más fácil de "separar/demonizar" un script Bash?
- 5. ¿Cuál sería el sistema más simple para enviar sms desde el servidor de Linux?
- 6. CSV a la secuencia de comandos XLS de Linux
- 7. ¿Forma HTML POST a una secuencia de comandos python?
- 8. ¿Cuál sería getDesktopProperty() para Linux?
- 9. ¿Cuál sería la forma más rápida de eliminar las Nuevas líneas de una Cadena en C#?
- 10. Reinicio de una secuencia de comandos python autoactualizable
- 11. ¿Cuál es la forma más simple de encontrar la diferencia entre 2 veces en python?
- 12. La secuencia de comandos PHP no puede obtenerse desde la secuencia de comandos de Python
- 13. Cuál sería la mejor forma de almacenar registros en SQL
- 14. ¿La forma más simple de incrementar una fecha en PHP?
- 15. ¿Cuál es la forma más simple de crear un iterable vacío usando rendimiento en Python?
- 16. ¿cómo detengo la ejecución en una secuencia de comandos python?
- 17. Contando la ocurrencia más larga de secuencia repetida en Python
- 18. Tome una captura de pantalla a través de una secuencia de comandos python. [Linux]
- 19. ¿Cuál sería la forma de Spring de usar conexiones TCP?
- 20. ¿Cómo desarmo una secuencia de comandos de Python?
- 21. Pasando el valor de la secuencia de comandos PHP a la secuencia de comandos de Python
- 22. Demonización de una secuencia de comandos python en debian mediante virtualenv
- 23. ¿cuál sería una forma rápida de leer un archivo de propiedad en python?
- 24. ¿Cómo puedo ejecutar una secuencia de comandos de Perl como un daemon del sistema en Linux?
- 25. (pero no de ejecución) una secuencia de comandos de Python
- 26. ¿cómo puedo determinar si una secuencia de comandos python se importa como módulo o se ejecuta como secuencia de comandos?
- 27. ¿La forma más rápida de compilar una aplicación Symbian simple?
- 28. La forma más eficiente de leer datos de una secuencia
- 29. ¿Cuál es la forma más simple de disminuir una fecha en Javascript en 1 día?
- 30. Ejecutar un comando del sistema linux como superusuario, usando una secuencia de comandos python
Una nota - por favor provea una forma de ejecutar su programa en el primer plano, tanto para la depuración y personas que prefieren herramientas de supervisión de procesos (tales como runit [http://smarden.org/runit] o daemontools [http://cr.yp.to/daemontools.html]) para ejecutar su programa como un servicio supervisado en lugar de un daemon. –
Sí, estoy de acuerdo (estoy usando daemontools) – edomaur
relacionado: [¿Cómo se crea un daemon en Python?] (Http://stackoverflow.com/q/473620/4279) – jfs