GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire lo script Python come servizio?

Uso questo codice per demonizzare le mie applicazioni. Ti consente start/stop/restart lo script utilizzando i seguenti comandi.

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

Oltre a questo ho anche uno script init.d per controllare il mio servizio. Ciò consente di avviare automaticamente il servizio all'avvio del sistema operativo.

Ecco un semplice esempio per iniziare. Basta spostare il codice all'interno di una classe e chiamarlo dal run funzione all'interno di 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)

Iniziato

Se utilizzi un sistema operativo che utilizza Upstart (ad esempio CentOS 6), puoi anche utilizzare Upstart per gestire il servizio. Se usi Upstart puoi mantenere il tuo script così com'è e aggiungere semplicemente qualcosa di simile sotto /etc/init/my-service.conf

start on started sshd
stop on runlevel [!2345]

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

Puoi quindi utilizzare start/stop/restart per gestire il tuo servizio.

ad esempio

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

Un esempio più dettagliato di come lavorare con upstart è disponibile qui.

Systemd

Se stai utilizzando un sistema operativo che utilizza Systemd (ad es. CentOS 7) puoi dare un'occhiata alla seguente risposta di StackOverflow.


Offro due consigli:

supervisore

1) Installa il supervisor pacchetto (istruzioni più dettagliate qui):

sudo apt-get install supervisor

2) Crea un file di configurazione per il tuo demone in /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) Riavvia supervisor per caricare il tuo nuovo .conf

supervisorctl update
supervisorctl restart flashpolicyd

systemd (se attualmente utilizzato dalla tua distribuzione 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

Inserisci questo file in /etc/systemd/system/my_daemon.service e abilitalo usando systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block .

Per visualizzare i log:

systemctl status my_daemon


Linux
  1. Come eseguire retroattivamente uno script come root?

  2. Come eseguire uno script??

  3. Come eseguire script Python dalla shell

  4. Come far funzionare uno script Python come un servizio o un demone in Linux

  5. Esegui lo script php come processo daemon

Come eseguire lo script della shell come servizio Systemd in Linux

Come eseguire uno script Python in PHP

Come configurare l'esecuzione automatica di uno script Python utilizzando Systemd

Come eseguire lo script della shell come servizio SystemD in Linux

Come eseguire uno script Bash

Come eseguire uno script con systemd subito prima dell'arresto?