Comment exécuter un script Bash en tant que daemon ?

Publié 27 août 2024

Problème : Exécuter des scripts Bash en arrière-plan

Les scripts Bash aident à automatiser des tâches, mais ils s'arrêtent généralement lorsque la session du terminal se termine. Cela peut poser problème pour les scripts qui doivent fonctionner longtemps ou sans interruption. Les utilisateurs souhaitent souvent que leurs scripts Bash continuent à s'exécuter en arrière-plan, même après s'être déconnectés ou avoir fermé le terminal.

Solutions pour exécuter des scripts Bash comme des démons

Solution 1 : Utiliser la commande nohup

La commande nohup exécute les scripts Bash en arrière-plan. Pour l'utiliser, tapez "nohup" avant la commande de votre script. Cela permet au script de continuer à s'exécuter même si vous fermez le terminal.

Pour rediriger la sortie vers un fichier journal, ajoutez ">" et le nom du fichier après votre commande. Par exemple :

nohup ./votre_script.sh > sortie.log 2>&1 &

Cette commande exécute votre script, envoie les messages de sortie et d'erreur vers sortie.log, et place le processus en arrière-plan.

Solution 2 : Créer un service Systemd

Systemd gère les services sous Linux. Pour exécuter votre script comme un service systemd :

  1. Créez un fichier d'unité dans /etc/systemd/system/ avec une extension .service.
  2. Ajoutez ce contenu au fichier :
[Unit]
Description=Description de votre script

[Service]
ExecStart=/chemin/vers/votre/script.sh
Restart=always
User=votre_nom_utilisateur

[Install]
WantedBy=multi-user.target
  1. Activez et démarrez le service avec ces commandes :
sudo systemctl enable votre_service.service
sudo systemctl start votre_service.service

Solution 3 : Utiliser la commande Screen

La commande screen crée une session séparée pour votre script. Pour l'utiliser :

  1. Installez screen s'il n'est pas présent sur votre système.
  2. Démarrez une nouvelle session screen :
screen -S nom_de_votre_session
  1. Exécutez votre script dans cette session.
  2. Détachez-vous de la session en appuyant sur Ctrl+A, puis D.

Pour vous rattacher à la session plus tard, utilisez :

screen -r nom_de_votre_session

Cette méthode vous permet d'exécuter des scripts en arrière-plan et de les vérifier ultérieurement si nécessaire.

Informations supplémentaires : Surveillance et gestion des scripts démons

Gestion des journaux et des sorties

La journalisation des activités des démons aide à suivre les performances des scripts et à résoudre les problèmes. Pour journaliser les activités des démons :

  • Utilisez la commande 'logger' dans votre script pour envoyer des messages aux journaux système :

    logger "Votre message de journal ici"
  • Redirigez la sortie du script vers un fichier journal :

    ./votre_script.sh > /chemin/vers/fichier_journal.log 2>&1

Pour gérer la sortie du script en mode démon :

  • Utilisez la commande 'tee' pour envoyer la sortie vers un fichier et la console :

    ./votre_script.sh 2>&1 | tee /chemin/vers/fichier_journal.log
  • Configurez la rotation des journaux pour gérer la taille des fichiers journaux :

    logrotate /etc/logrotate.conf

Contrôle et gestion des processus

Pour arrêter et redémarrer les scripts démons :

  • Pour les services systemd :

    sudo systemctl stop nom_de_votre_service
    sudo systemctl start nom_de_votre_service
    sudo systemctl restart nom_de_votre_service
  • Pour les scripts exécutés avec nohup :

    kill $(pgrep -f nom_de_votre_script)

Pour vérifier l'état d'un script démon :

  • Pour les services systemd :

    sudo systemctl status nom_de_votre_service
  • Pour les processus généraux :

    ps aux | grep nom_de_votre_script
  • Utilisez les commandes 'top' ou 'htop' pour surveiller les ressources système utilisées par votre script démon.

Ces méthodes vous aident à surveiller, contrôler et gérer vos scripts démons.

Solutions alternatives pour exécuter des scripts en arrière-plan

Utilisation de l'opérateur & avec Disown

Pour exécuter des scripts en arrière-plan avec l'opérateur &, ajoutez-le à la fin de votre commande :

./votre_script.sh &

Cela démarre le script et rend le contrôle au terminal. Cependant, le script s'arrêtera si vous fermez le terminal. Pour éviter cela, utilisez la commande disown :

./votre_script.sh &
disown

La commande disown détache le processus du terminal, lui permettant de continuer à s'exécuter même après votre déconnexion.

Tâches Cron pour une exécution planifiée

Les tâches Cron vous permettent de planifier l'exécution de scripts à des moments précis. Pour configurer une tâche Cron :

  1. Ouvrez le fichier crontab :

    crontab -e
  2. Ajoutez une ligne pour planifier votre script :

    0 * * * * /chemin/vers/votre_script.sh

Cet exemple exécute le script toutes les heures.

Les tâches Cron sont utiles pour les tâches périodiques mais ont des limites pour les tâches de type démon :

Avantages :

  • Faciles à configurer
  • Planification intégrée

Limites :

  • Pas idéales pour les processus continus
  • Contrôle limité sur l'exécution

Utilisez les tâches Cron pour les tâches planifiées, mais envisagez d'autres méthodes pour les processus de longue durée.