Exécuter un script bash toutes les N secondes

 · Temps de lecture: 2 mins

Voici un guide rapide et simple qui vous aidera à exécuter un script bash toutes les N secondes. Notez que vous pouvez exécuter des commandes root depuis le script car nous utiliserons systemd.

Créez un service qui exécutera votre script

La première étape est de configurer une tâche qui exécutera le script chaque fois que le timer lui demandera. Vous pouvez utiliser nano pour créer un nouveau service appelé name.service dans /etc/systemd/system/system/, où vous pouvez choisir name. Si le paquet n’est pas installé, exécutez la commande suivante et vous pouvez continuer.

sudo apt-get install nano

Lancez nano pour créer le fichier :

sudo nano /etc/systemd/system/name.service

et remplissez-le avec (ctrl+shift+v pour coller dans le terminal)

[Unit]
Description=A short description

[Service]
Type=oneshot
ExecStart=/bin/bash /path/to/script.sh

Description explique ce que fait le script bash. Il sera affiché lorsque vous listerez tous les services actifs avec systemctl, et /path/to/script.sh est l’emplacement de votre script. Vous pouvez l’obtenir en tapant :

readlink -f yourscript.sh

Créez un timer qui exécutera votre service toutes les N secondes.

La deuxième étape consiste à configurer un timer qui demandera à systemd d’exécuter le service que vous avez précédemment créé toutes les N secondes. Encore une fois, nous allons utiliser nano pour créer le fichier :

sudo nano /etc/systemd/system/name.timer

Vous devez utiliser la même chaîne de nom pour les deux fichiers. En fin de compte, vous devriez avoir créé name.service et name.timer

Une fois que vous êtes prêt à éditer le fichier timer, collez le contenu suivant :

[Unit]
Description=A short description

[Timer]
OnUnitActiveSec=360s
OnBootSec=10s

[Install]
WantedBy=timers.target

Description donne des détails sur le service auquel la minuterie est également associée, 360 peut être remplacé par le nombre de secondes (N) dont vous avez besoin. Vous pouvez laisser le reste tel quel, OnBootSec ne fait que faire tourner le timer 10 secondes après chaque démarrage pour que vous n’ayez pas à le démarrer manuellement à chaque redémarrage de votre machine !

Testez votre timer et service

La dernière étape consiste à reload tous les daemons systemctl, démarrer votre timer et vérifier s’il est actif. Notez que lorsque vous démarrez name.timer, il exécutera le service une fois puis toutes les N secondes.

sudo systemctl daemon-reload
sudo systemctl start name.timer
systemctl list-timers

Vous devriez obtenir une sortie ressemblant à ceci :

timers.jpg

Où devrait se trouver votre timer dans la colonne UNIT et le temps restant avant que votre service ne soit exécuté une autre fois dans la colonne LEFT.

Voilà! Votre script bash et les commandes qu’il contient seront exécutés toutes les N secondes, même si vous redémarrez votre machine.