Saltar al contenido

¿Cómo se crea un demonio en Python?

Te traemos la contestación a esta dificultad, al menos eso pensamos. Si sigues con inquietudes déjanoslo saber en un comentario, que con placer te ayudaremos

Solución:

Solución actual

Una implementación de referencia de PEP 3143 (biblioteca de procesos de daemon estándar) ahora está disponible como python-daemon.

Respuesta histórica

El ejemplo de código de Sander Marechal es superior al original, que se publicó originalmente en 2004. Una vez contribuí con un daemonizer para Pyro, pero probablemente usaría el código de Sander si tuviera que hacerlo de nuevo.

Hay muchas cosas raras cuidar cuando se convierte en un proceso daemon de buen comportamiento:

  • evitar volcados de núcleo (muchos demonios se ejecutan como raíz y los volcados de núcleo pueden contener información confidencial)

  • comportarse correctamente dentro de un chroot cárcel

  • establecer UID, GID, directorio de trabajo, umask y otros parámetros de proceso de forma adecuada para el caso de uso

  • renunciar elevado suid, sgid privilegios

  • cierre todos los descriptores de archivos abiertos, con exclusiones según el caso de uso

  • comportarse correctamente si se inicia dentro de un contexto ya separado, como init, inetdetc

  • configurar controladores de señales para un comportamiento sensible del demonio, pero también con controladores específicos determinados por el caso de uso

  • redirigir los flujos estándar stdin, stdout, stderr ya que un proceso daemon ya no tiene una terminal de control

  • manejar un archivo PID como un bloqueo de aviso cooperativo, que es una lata de gusanos en sí mismo con muchas formas contradictorias pero válidas de comportarse

  • Permitir una limpieza adecuada cuando finalice el proceso.

  • convertirse en un proceso demoníaco sin generar zombis

Algunos de estos son estándarcomo se describe en la literatura canónica de Unix (Programación Avanzada en el Entorno UNIX, por el difunto W. Richard Stevens, Addison-Wesley, 1992). Otros, como la redirección de flujo y el manejo de archivos PID, son comportamiento convencional la mayoría de los usuarios de demonios esperarían, pero están menos estandarizados.

Todos estos están cubiertos por la Especificación PEP 3143 “Biblioteca de procesos de daemon estándar”. La implementación de referencia de python-daemon funciona en Python 2.7 o posterior y Python 3.2 o posterior.

Aquí está mi daemon básico de Python ‘Howdy World’ con el que empiezo, cuando estoy desarrollando una nueva aplicación de daemon.

#!/usr/bin/python
import time
from daemon import runner

class App():
    def __init__(self):
        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
    def run(self):
        while True:
            print("Howdy!  Gig'em!  Whoop!")
            time.sleep(10)

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()

Tenga en cuenta que necesitará el python-daemon Biblioteca. Puedes instalarlo por:

pip install python-daemon

Entonces empieza con ./howdy.py starty detenerlo con ./howdy.py stop.

Calificaciones y comentarios

Si para ti ha sido útil este post, sería de mucha ayuda si lo compartes con más programadores y nos ayudes a dar difusión a nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *