cover image
IdO

Utiliser systemd pour démarrer une application Python avec virtualenv

Systemd est excellent pour démarrer et arrêter des services sous Linux. Cet article explique comment créer un script systemd en utilisant l'exemple de l'application Python open source Timetagger.

Systemd

Sur les systèmes Linux, systemd est un système init utilisé pour démarrer l'espace utilisateur et gérer les processus utilisateur. Au moment de son introduction, il était controversé, mais il est maintenant utilisé par la majorité des distributions Linux modernes. Ainsi, lorsque vous souhaitez exécuter automatiquement une application à chaque démarrage du système d'exploitation Linux, vous devez créer un fichier de configuration. Je vous montrerai plus tard comment le faire.

Virtualenv

Lors de l'installation d'applications Python qui ont des dépendances de bibliothèques, il est très utile d'utiliser le service de virtualenv. Avec l'aide de virtualenv, vous pouvez isoler les applications Python afin que les dépendances de bibliothèque n'interfèrent pas entre elles. Ceci est nécessaire si vous avez plusieurs applications Python installées en même temps dans votre système. Depuis Python 3.3, un sous-ensemble de virtualenv est intégré au module venv.

Timetagger

Timetagger est une application open source Python de suivi du temps développée par Almar Klein. Je l'utilise comme exemple ici car je trouve Timetagger utile dans mon travail. Il dispose d'une interface web confortable pour suivre votre temps et possède également une API. Grâce à la CLI de Timetagger, vous pouvez lancer et arrêter le suivi du temps en ligne de commande. C'est particulièrement pratique pour les développeurs de logiciels.

Lorsque vous hébergez vous-même l'application, vous souhaitez probablement l'exécuter automatiquement à chaque démarrage de votre système. C'est là que le script systemd entre en jeu.

Script systemd

Vous devez installer Timetagger avec virtualenv afin d'utiliser le script systemd. Après avoir cloné Timetagger depuis GitHub, vous pouvez exécuter les commandes suivantes pour l'installer à l'aide de virtualenv :

cd timetagger 

python3 -m venv venv 

. venv/bin/activate 

pip3 install -r requirements.txt 

Maintenant que toutes les dépendances sont installées en utilisant virtualenv, vous devez créer le script de service systemd (timetagger.service) dans le répertoire système en utilisant un éditeur de texte :

/etc/systemd/system/timetagger.service

[Unit]
Description=Service Timetagger 

[Service]
User=Votre nom d´utilisateur Linux 
WorkingDirectory=Votre dossier timetagger 
ExecStart=Votre dossier timetagger/venv/bin/python3 -m timetagger & 

[Install]
WantedBy=multi-user.target 

Remplacez Votre dossier timetagger par le nom réel du répertoire Timetagger sur votre système.

J'utilise le & à la fin de la commande pour faire fonctionner Timetagger en arrière-plan. La clé pour exécuter une application Python qui a été installée via virtualenv est d'exécuter Python via le dossier venv/bin. Notez que vous avez besoin de droits d'administrateur pour créer le fichier timetagger.service.

Vous pouvez maintenant démarrer timetagger avec:

sudo systemctl start timetagger

Pour exécuter timetagger automatiquement à chaque démarrage du système, activez-le comme suit:

sudo systemctl enable timetagger 

Arrêter Timetagger

Lorsque vous avez démarré Timetagger de la manière décrite ci-dessus, vous pouvez l'arrêter en lui envoyant un signal SIGSTOP:

kill -SIGSTOP pid 

Vous pouvez obtenir le pid (identifiant du processus) via la commande ps ax. Cherchez le nom du Timetagger.

Conclusion

Faire tourner des applications Python qui utilisent virtualenv automatiquement dans systemd n'est pas sorcier. J'espère qu'avec cet article je vous ai montré comment le faire.

Références

Image de couverture par OpenAI Dall-E2 : "Yellow snake with a time tagger".

Publié le 18 novembre 2021

Creative Commons License
Cette œuvre est soumise à une licence Creative Commons Attribution 4.0 International License.
Thomas Derflinger

Écrit par Thomas Derflinger

Je suis un entrepreneur visionnaire et un développeur de logiciels. Dans ce blog, j'écris principalement sur la programmation web et des sujets connexes comme l'IdO.