GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo hacer que el script de Python se ejecute como servicio?

Utilizo este código para demonizar mis aplicaciones. Te permite start/stop/restart el script usando los siguientes comandos.

python myscript.py start
python myscript.py stop
python myscript.py restart

Además de esto, también tengo un script init.d para controlar mi servicio. Esto le permite iniciar automáticamente el servicio cuando se inicia su sistema operativo.

Aquí hay un ejemplo simple para que te pongas en marcha. Simplemente mueva su código dentro de una clase y llámelo desde el run función dentro de MyDeamon .

import sys
import time

from daemon import Daemon


class YourCode(object):
    def run(self):
        while True:
            time.sleep(1)


class MyDaemon(Daemon):
    def run(self):
        # Or simply merge your code with MyDaemon.
        your_code = YourCode()
        your_code.run()


if __name__ == "__main__":
    daemon = MyDaemon('/tmp/daemon-example.pid')
    if len(sys.argv) == 2:
        if 'start' == sys.argv[1]:
            daemon.start()
        elif 'stop' == sys.argv[1]:
            daemon.stop()
        elif 'restart' == sys.argv[1]:
            daemon.restart()
        else:
            print "Unknown command"
            sys.exit(2)
        sys.exit(0)
    else:
        print "usage: %s start|stop|restart" % sys.argv[0]
        sys.exit(2)

Advenedizo

Si está ejecutando un sistema operativo que usa Upstart (por ejemplo, CentOS 6), también puede usar Upstart para administrar el servicio. Si usa Upstart, puede mantener su secuencia de comandos tal como está y simplemente agregar algo como esto en /etc/init/my-service.conf

start on started sshd
stop on runlevel [!2345]

exec /usr/bin/python /opt/my_service.py
respawn

Luego puede usar iniciar/detener/reiniciar para administrar su servicio.

por ejemplo

start my-service
stop my-service
restart my-service

Un ejemplo más detallado de cómo trabajar con upstart está disponible aquí.

Systemd

Si está ejecutando un sistema operativo que usa Systemd (por ejemplo, CentOS 7), puede consultar la siguiente respuesta de Stackoverflow.


Ofrezco dos recomendaciones:

supervisado

1) Instala el supervisor paquete (instrucciones más detalladas aquí):

sudo apt-get install supervisor

2) Cree un archivo de configuración para su daemon en /etc/supervisor/conf.d/flashpolicyd.conf :

[program:flashpolicyd]
directory=/path/to/project/root
environment=ENV_VARIABLE=example,OTHER_ENV_VARIABLE=example2
command=python flashpolicyd.py
autostart=true
autorestart=true

3) Reiniciar supervisor para cargar tu nuevo .conf

supervisorctl update
supervisorctl restart flashpolicyd

systemd (si actualmente lo usa su distribución de Linux)

[Unit]
Description=My Python daemon

[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/project/main.py
WorkingDirectory=/opt/project/
Environment=API_KEY=123456789
Environment=API_PASS=password
Restart=always
RestartSec=2

[Install]
WantedBy=sysinit.target

Coloque este archivo en /etc/systemd/system/my_daemon.service y habilitarlo usando systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block .

Para ver registros:

systemctl status my_daemon


Linux
  1. ¿Cómo ejecutar “find -exec {};?

  2. ¿Cómo hacer retroactivamente que un script se ejecute como raíz?

  3. ¿Cómo puedo ejecutar un script de Perl como un demonio del sistema en Linux?

  4. Cómo hacer que un script de Python se ejecute como un servicio o demonio en Linux

  5. Ejecute el script php como proceso daemon

Cómo ejecutar Shell Script como servicio Systemd en Linux

Cómo ejecutar un script de Python en PHP

Cómo configurar la ejecución automática de un script de Python usando Systemd

Cómo ejecutar Shell Script como servicio SystemD en Linux

Cómo ejecutar un script Bash

Ejecutar script bash como demonio