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.
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
-
Systemd : https://systemd.io
-
Python : https://www.python.org
-
Virtualenv : https://virtualenv.pypa.io/en/latest
-
Timetagger : https://github.com/almarklein/timetagger
Image de couverture par OpenAI Dall-E2 : "Yellow snake with a time tagger".
Publié le
18 nov. 2021