Exécuter tout exécutable en tant que service sous Linux
Exécuter tout exécutable en tant que service Linux
Voici un ensemble d’instructions sur Comment Configurer pour exécuter tout exécutable en tant que service sous Linux avec Systemd.
Au-dessus, une image générée par IA (modèle de développement Flux 1) représentant les engrenages symbolisant l’approche DIY de Linux.
Systemd
Systemd est un gestionnaire de système et de services ainsi qu’un outil d’initialisation utilisé dans certains distributions Linux.
Voici quelques distributions populaires utilisant systemd :
- Ubuntu 16.04 ou plus récent
- Debian Jessie ou plus récent
- Arch Linux
- CentOS 7 / RHEL 7 ou plus récent
- Fedora 15 ou plus récent
systemctl
systemctl
est un outil en ligne de commande pour contrôler systemd
.
Liste de tous les services
Pour obtenir la liste de tous les services, exécutez la commande suivante :
systemctl list-units --type=service
Créer un fichier de service
Accédez au répertoire des services systemd et créez un nouveau fichier avec l’extension .service
:
sudo nano /etc/systemd/system/your_service_name.service
Configurez le fichier de service :
Ajoutez le contenu suivant au fichier, en ajustant les valeurs selon vos besoins :
[Unit]
Description=Description de votre service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/chemin/vers/le/répertoire/de/votre/exécutable
ExecStart=/chemin/vers/votre/exécutable
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Enregistrez et fermez le fichier.
Délai de démarrage du service
Si vous soupçonnez un problème de timing lors du démarrage du service, envisagez d’ajouter un délai à votre configuration de service :
[Service]
ExecStartPre=/bin/sleep 10
Dépendances du service
Pour configurer les dépendances de votre service : dans la section [Unit] du fichier de configuration du service,
ajoutez les directives suivantes :
Utilisez After=
pour spécifier les services qui doivent démarrer avant votre service :
After=network.target other_service.service
Utilisez Requires=
pour définir des dépendances obligatoires :
Requires=required_service.service
Utilisez Wants=
pour définir des dépendances optionnelles :
Wants=optional_service.service
Relancer systemd pour qu’il reconnaisse le nouveau service
sudo systemctl daemon-reload
Vérifier les dépendances du service
sudo systemctl list-dependencies your_service_name.service
Activer le service pour qu’il démarre au démarrage
sudo systemctl enable your_service_name.service
Pour vérifier que votre service est configuré pour démarrer au démarrage :
sudo systemctl is-enabled your_service_name.service
Démarrer le service
sudo systemctl start your_service_name.service
# ou
sudo systemctl restart your_service_name.service
Vérifier l’état du service
Si quelque chose s’est mal passé, vérifiez les journaux et l’état du service Linux :
sudo systemctl status your_service_name.service
ou
sudo journalctl -u your_service_name.service
Pour les scripts Python
ExecStart=/chemin/vers/conda/envs/my_env_name/bin/python /chemin/vers/l'exécutable.py
Commentaires
Vous pouvez maintenant gérer votre service à l’aide des commandes systemctl
, telles que start
, stop
, restart
et status
.
Pour les exécutables nécessitant des paramètres, modifiez la ligne ExecStart
dans le fichier de service en conséquence.
Par exemple, si vous devez exécuter une application Java, utilisez la commande Java complète dans la ligne ExecStart
.
N’oubliez pas d’ajuster les permissions et la propriété des fichiers comme nécessaire, et assurez-vous que l’exécutable a les bonnes permissions d’exécution.
Contrôle des services systemd avec chkservice
Au lieu d’exécuter
sudo systemctl start some-serviceservice
# ou
sudo systemctl restart some-serviceservice
Vous pouvez utiliser un outil d’interface utilisateur en console. Facile et léger
sudo apt-get install chkservice
sudo chkservice