Exécuter tout exécutable en tant que service sous Linux

Exécuter tout exécutable en tant que service Linux

Sommaire

Voici un ensemble d’instructions sur Comment Configurer pour exécuter tout exécutable en tant que service sous Linux avec Systemd.

linux cogs 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

Liens utiles