Problème : Exécuter une tâche cron une seule fois à un moment spécifique
Les tâches cron sont généralement configurées pour s'exécuter de manière répétée à des horaires programmés. Cependant, il est parfois nécessaire d'exécuter une tâche une seule fois à un moment précis. Cela peut être délicat lors de la configuration de cron pour effectuer une tâche unique et ponctuelle sans la répéter.
Solutions pour exécuter des tâches cron une seule fois à un moment précis
Utilisation de la commande 'at' pour une planification ponctuelle
La commande 'at' permet de planifier des tâches ponctuelles. Vous pouvez définir un moment futur pour l'exécution d'une commande. La syntaxe est la suivante :
echo "/chemin/vers/commande options" | at [heure]
Pour exécuter une commande demain :
echo "/usr/bin/ma_commande" | at now + 1 day
Conseil: Vérifier les tâches planifiées
Utilisez la commande 'atq' pour lister toutes les tâches planifiées. Cela vous aide à confirmer que votre tâche a été correctement programmée et à voir son numéro de file d'attente pour d'éventuelles modifications ou suppressions.
Tâche cron avec script d'auto-désactivation
Si 'at' n'est pas disponible, créez un script d'auto-désactivation :
-
Configurez une tâche cron avec une heure spécifique :
0 0 2 12 * /chemin/vers/votre_script.sh
-
Créez un script qui ne s'exécute qu'une seule fois :
#!/bin/bash SCRIPT="/chemin/vers/votre_script.sh" MARQUEUR="${SCRIPT}.done" if [ -f "$MARQUEUR" ]; then exit 0 fi # Votre tâche ponctuelle ici echo "Tâche exécutée" | mail -s "Tâche ponctuelle terminée" utilisateur@exemple.com touch "$MARQUEUR"
Ce script vérifie l'existence d'un fichier marqueur et s'arrête s'il existe, empêchant ainsi les exécutions multiples.
Utilisation de cron avec vérification de la date
Une autre méthode consiste à vérifier la date :
#!/bin/bash
DATE_EXECUTION="2023-12-25"
DATE_ACTUELLE=$(date +%Y-%m-%d)
if [ "$DATE_ACTUELLE" != "$DATE_EXECUTION" ]; then
exit 0
fi
# Votre tâche ponctuelle ici
echo "Tâche de vacances exécutée" | mail -s "Tâche de vacances terminée" utilisateur@exemple.com
Ce script n'exécute la tâche qu'à la date définie, sortant si la date actuelle ne correspond pas.
Exemple: Ajout de journalisation aux tâches cron basées sur la date
#!/bin/bash
DATE_EXECUTION="2023-12-25"
DATE_ACTUELLE=$(date +%Y-%m-%d)
FICHIER_LOG="/var/log/tache_ponctuelle_cron.log"
if [ "$DATE_ACTUELLE" != "$DATE_EXECUTION" ]; then
echo "$(date): Script vérifié, mais non exécuté (mauvaise date)" >> "$FICHIER_LOG"
exit 0
fi
# Votre tâche ponctuelle ici
echo "Tâche de vacances exécutée" | mail -s "Tâche de vacances terminée" utilisateur@exemple.com
echo "$(date): Tâche exécutée avec succès" >> "$FICHIER_LOG"
Cet exemple ajoute une journalisation pour suivre les tentatives d'exécution du script et les réussites, ce qui est utile pour surveiller et dépanner les tâches cron ponctuelles.