Créer une tâche planifiée avec la crontab Linux
Après de nombreuses recherches sur le web et tentatives/echecs, j'ai réussi à automatiser une tâche sous Linux !
Pas très glorieux diront certains, mais tout le monde n'est pas expert : cet article rassemble les trucs et astuces pour y parvenir...
1) HYPOTHESE DE TRAVAIL
Partons de l'hypothèse que je veuille périodiquement vérifier si la commande ou le logiciel "Toto.bat" est toujours actif.
S'il ne l'est pas, je le relance. Sinon je ne fais rien.
Dans les 2 cas, je consigne ce que j'ai fait dans un fichier de logs.
Autre hypothèse : je ne suis qu'un simple utilisateur de la machine, et mon logiciel Toto.bat est conservé dans mon répertoire personnel.
Enfin, tout ceci doit s'exécuter automatiquement lorsque je suis déconnecté et même sans me connecter du tout : si le système redémarre, la vérification doit se relancer toute seule !
Pour résoudre ce problème, je vais utiliser la crontab de Linux, sans la modifier directement. Pour plus d'informations, affichez l'aide sur la crontab : "man cron" et "man crontab".
Ah oui, j'ai oublié de vous dire : tout est en lignes de commandes !
Il nous faut donc :
- Un script écrit en shell, permettant d'exécuter les commandes nécessaires.
- Un fichier texte, dans lequel écrire les logs.
- Modifier la crontab du système Linux.
2) SCRIPT SHELL EXECUTANT LES COMMANDES
Pour commencer, je crée un fichier texte intitulé "Toto-cron.sh" dans mon répertoire personnel.
Vous pouvez utiliser n'importe quel éditeur (nano, vi, vim, gedit...), et je vous conseille de le tester ensuite (sh ./Toto-cron.sh).
#!/bin/bash
# Variable contenant la commande pour relancer Toto.bat.
# J'utilise "nohup" pour que cette commande puisse fonctionner dans les taĉhes du système, sans avoir besoin de conserver une session utilisateur ouverte.
RESTART="nohup /home/banania/Toto.bat"
# Variable contenant le chemin d'accès au fichier de logs. Par défaut, tout utilisateur dispose des droits lecture-écriture dans ce répertoire.
LOGFILE="/var/tmp/Toto.log"
# Variable d'environnement que j'actualise pour m'affranchir des spécificités des shells Bourne/Korn/etc...
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Je vérifie si Toto.bat est actif en éliminant les doublons, puis inscrits son état dans le fichier de logs
if ps -ef | grep -q '[T]oto\.bat'
then
echo "Toto actif à $(date)" >> $LOGFILE
else
echo "Redémarrage de Toto à $(date)" >> $LOGFILE
# Je relance Toto en redirigeant l'écran et les messages d'erreurs pour qu'ils s'effacent automatiquement
$RESTART >/dev/null 2>&1 &
fi
exit
3) PLANIFICATION DE LA CRONTAB
Pour commencer, je rends Toto-cron.sh exécutable. Pour faire simple :
chmod +x Toto-cron.sh
Puis, je configure la crontab du système en tapant :
crontab -e
Dans le fichier qui s'ouvre, j'ajoute une ligne pour préciser que je ne veux pas recevoir des emails de la part de la crontab :
# MAILTO=""
Puis j'ajoute une ligne précisant quoi faire et à quel moment. Ici, je veux une exécution toutes les heures, mais d'autres planifications sont possibles : des exemples de syntaxe sont disponibles sur le web.
# 0 * * * * sh /home/banania/Toto-cron.sh 2>&1
Je sauvegarde et je quite, c'est tout !
De mémoire, il n'est pas nécessaire de redémarrer le système ou le service/démon "cron". Mais si rien ne se passe, consultez la commande de relance de "cron" sur votre propre système.
Congratulations @banania! You have completed some achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of posts published
Click on any badge to view your own Board of Honnor on SteemitBoard.
For more information about SteemitBoard, click here
If you no longer want to receive notifications, reply to this comment with the word
STOP
If you want to support the SteemitBoard project, your upvote for this notification is welcome!