Écriture d'un script bash simple pour automatiser des tâches avec cron
1. Définition du problème
Aujourd’hui, on va écrire un script pratique qui vérifie la disponibilité d’un site Web et enregistre le résultat dans un fichier log, puis on automatisera son exécution avec cron
.
Qu’est-ce qu’on veut faire ?
On va créer un script bash qui :
- Vérifie la disponibilité d’un site Web donné à l’aide de
ping
. - Écrit le résultat de la vérification dans un fichier log, en incluant l’heure et la date.
- Lance ce script automatiquement toutes les 5 minutes à l’aide de
cron
.
Pourquoi c’est important ?
Dans le monde réel, surveiller la disponibilité des sites Web et des serveurs est l’une des tâches clés des administrateurs système. Par exemple, si votre site (ou serveur) cesse soudainement de répondre, vous voulez en être informé le plus vite possible. Ce type de scénario est utile non seulement pour la surveillance, mais aussi lors d’entretiens d’embauche ou dans la pratique professionnelle.
2. Étape 1 : Écrire un script bash simple
Commençons par écrire le script bash principal. Voici une explication étape par étape de ce qu'il fera :
- On définira l'adresse du site à vérifier.
- On utilisera
ping
pour tenter d'envoyer une requête au serveur. - On vérifiera si une réponse disponible est revenue.
- On enregistrera le résultat dans un fichier de log.
Créons le fichier site_check.sh
:
#!/bin/bash
# Définir l'adresse du site web
WEBSITE="example.com"
# Fichier pour enregistrer les résultats
LOG_FILE="/var/log/site_status.log"
# Vérification de la disponibilité du site avec ping
if ping -c 1 $WEBSITE &> /dev/null; then
# Si le site est disponible
echo "$(date): $WEBSITE est joignable" >> $LOG_FILE
else
# Si le site est indisponible
echo "$(date): $WEBSITE est non joignable" >> $LOG_FILE
fi
Explication du code :
#!/bin/bash
— indique que ce script doit être exécuté en utilisant Bash.WEBSITE="example.com"
— l'adresse du site à vérifier. Vous pouvez remplacerexample.com
par n'importe quel site ou serveur que vous voulez surveiller.ping -c 1 $WEBSITE
— envoie un seul (-c 1
) paquet au site spécifié. Si le site répond, la commande se termine avec un code 0. Sinon, avec une erreur.&> /dev/null
— redirige la sortie standard et les erreurs vers le "trou noir" (on ne veut pas voir la sortie deping
dans la console).$(date)
— ajoute la date et l'heure actuelles au message.>> $LOG_FILE
— ajoute le résultat à la fin du fichier de log.
3. Étape 2 : Lancer le script manuellement
Avant d'automatiser l'exécution du script, assurons-nous qu'il fonctionne correctement.
Enregistrez le script dans un fichier
site_check.sh
.Rendez-le exécutable :
chmod +x site_check.sh
Lancez-le :
sudo ./site_check.sh
Après l'exécution du script, ouvrez le fichier /var/log/site_status.log
pour vous assurer que le résultat du contrôle a été ajouté au log. Utilisez la commande :
cat /var/log/site_status.log
Si tout fonctionne, vous devriez voir une ligne du genre :
Lun Oct 30 14:35:22 UTC 2023 : example.com est accessible
4. Étape 3 : Configuration de l'exécution automatique avec cron
On sait déjà que cron
permet d'exécuter des tâches selon un planning. Maintenant, on va configurer cron
pour que notre script s'exécute toutes les 5 minutes.
Édition du crontab
Ouvre l'éditeur crontab
:
crontab -e
Ajoute la ligne suivante :
*/5 * * * * /path/to/site_check.sh
Explication :
*/5
— indique que la tâche doit s'exécuter toutes les 5 minutes./path/to/site_check.sh
— chemin complet de notre script. Assure-toi qu'il est correct. Par exemple, si le script est dans le répertoire personnel de l'utilisateur, le chemin sera quelque chose comme/home/votre_nom_utilisateur/site_check.sh
.
Après avoir sauvegardé les modifications, cron
commencera à exécuter le script toutes les 5 minutes. Pour vérifier que la tâche a été ajoutée, exécute :
crontab -l
5. Étape 4 : Vérification du fonctionnement de cron
Maintenant, vérifions si l'automatisation fonctionne. Attendez 5-10 minutes et ouvrez à nouveau le fichier log :
cat /var/log/site_status.log
Vous devriez voir de nouvelles entrées qui se mettent à jour toutes les 5 minutes. Par exemple :
Lun 30 Oct 14:35:22 UTC 2023 : example.com est accessible
Lun 30 Oct 14:40:22 UTC 2023 : example.com est accessible
Lun 30 Oct 14:45:22 UTC 2023 : example.com est accessible
6. Analyse des questions et erreurs typiques
Ping retourne l'erreur 'Permission denied'
Si tu exécutes le script en tant qu'utilisateur normal, il se peut qu'il n'ait pas assez de droits. Exécute le script avec
sudo
ou ajoute les permissions nécessaires pour l'exécution.Le fichier de logs ne se crée pas
Vérifie que le chemin vers le fichier de logs (
/var/log/site_status.log
) est correct et que ton utilisateur a les droits d'écriture dans ce dossier. Si le fichier n'existe pas, crée-le manuellement avec :sudo touch /var/log/site_status.log sudo chmod 666 /var/log/site_status.log
cron
n'exécute pas le scriptVérifie si le service
cron
est actif :sudo systemctl status cron
Il doit être dans l'état
active (running)
. Si le service est arrêté, démarre-le :sudo systemctl start cron
Le script ne s'exécute pas avec cron, mais fonctionne manuellement
Assure-toi que le chemin vers le script et tous les fichiers utilisés est complet. Dans les tâches
cron
, les variables d'environnement (par exemple,$PATH
) peuvent être différentes. Il est préférable d'utiliser des chemins absolus.
7. Améliorations et tâches supplémentaires
Filtrage des sites web
Étendez le script pour vérifier la disponibilité de plusieurs sites. Par exemple :
WEBSITES=("example.com" "google.com" "stackoverflow.com")
for SITE in ${WEBSITES[@]}; do
if ping -c 1 $SITE &> /dev/null; then
echo "$(date): $SITE est accessible" >> $LOG_FILE
else
echo "$(date): $SITE est inaccessible" >> $LOG_FILE
fi
done
Envoi de notifications
Ajoutez l'envoi de notifications si un site est inaccessible. Par exemple, en utilisant la commande mail
pour envoyer un email :
# Notification par email
if ! ping -c 1 $WEBSITE &> /dev/null; then
echo "$WEBSITE est hors service !" | mail -s "Alerte Vérification de Site" your_email@example.com
fi
Journalisation cyclique
Limitez la taille du fichier log à, disons, 1 Mo. Si le fichier devient trop grand, renommez-le (comme une archive) et commencez un nouveau log.
Félicitations ! Vous savez maintenant comment utiliser des scripts bash et cron
pour automatiser des tâches réelles. Ces compétences sont particulièrement recherchées par les ingénieurs DevOps et les administrateurs systèmes.
GO TO FULL VERSION