GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire fonctionner le script Python en tant que service ?

J'utilise ce code pour démoniser mes applications. Il vous permet start/stop/restart le script à l'aide des commandes suivantes.

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

En plus de cela, j'ai également un script init.d pour contrôler mon service. Cela vous permet de démarrer automatiquement le service au démarrage de votre système d'exploitation.

Voici un exemple simple pour vous lancer. Déplacez simplement votre code à l'intérieur d'une classe et appelez-le depuis le run fonction à l'intérieur 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)

Début

Si vous utilisez un système d'exploitation qui utilise Upstart (par exemple CentOS 6), vous pouvez également utiliser Upstart pour gérer le service. Si vous utilisez Upstart, vous pouvez conserver votre script tel quel et ajouter simplement quelque chose comme ceci sous /etc/init/my-service.conf

start on started sshd
stop on runlevel [!2345]

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

Vous pouvez ensuite utiliser start/stop/restart pour gérer votre service.

ex.

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

Un exemple plus détaillé de travail avec upstart est disponible ici.

Systemd

Si vous utilisez un système d'exploitation qui utilise Systemd (par exemple CentOS 7), vous pouvez consulter la réponse Stackoverflow suivante.


Je propose deux recommandations :

superviseur

1) Installez le supervisor package (instructions plus détaillées ici) :

sudo apt-get install supervisor

2) Créez un fichier de configuration pour votre démon à /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) Redémarrez supervisor pour charger votre nouveau .conf

supervisorctl update
supervisorctl restart flashpolicyd

systemd (si actuellement utilisé par votre distribution 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

Placez ce fichier dans /etc/systemd/system/my_daemon.service et activez-le en utilisant systemctl daemon-reload && systemctl enable my_daemon && systemctl start my_daemon --no-block .

Pour afficher les journaux :

systemctl status my_daemon


Linux
  1. Comment exécuter "find -exec {} ; ?

  2. Comment exécuter rétroactivement un script en tant que root ?

  3. Comment exécuter des scripts Python à partir du shell

  4. Comment puis-je exécuter un script Perl en tant que démon système sous Linux ?

  5. Comment faire fonctionner un script Python comme un service ou un démon sous Linux

Comment exécuter un script Shell en tant que service Systemd sous Linux

Comment exécuter un script Python en PHP

Comment configurer l'exécution automatique d'un script Python à l'aide de Systemd

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment exécuter un script bash

Comment exécuter un script python sur un terminal (ubuntu) ?