Pour abandonner et quitter immédiatement un script si la dernière exécution ne remonte pas à au moins une heure spécifique, vous pouvez utiliser cette méthode qui nécessite un fichier externe qui stocke la dernière date et heure d'exécution.
Ajoutez ces lignes en haut de votre script Bash:
#!/bin/bash
# File that stores the last execution date in plain text:
datefile=/path/to/your/datefile
# Minimum delay between two script executions, in seconds.
seconds=$((60*60*24*3))
# Test if datefile exists and compare the difference between the stored date
# and now with the given minimum delay in seconds.
# Exit with error code 1 if the minimum delay is not exceeded yet.
if test -f "$datefile" ; then
if test "$(($(date "+%s")-$(date -f "$datefile" "+%s")))" -lt "$seconds" ; then
echo "This script may not yet be started again."
exit 1
fi
fi
# Store the current date and time in datefile
date -R > "$datefile"
# Insert your normal script here:
N'oubliez pas de définir une valeur significative datefile=
et d'adapter la valeur de seconds=
à vos besoins ( $((60*60*24*3))
évaluation à 3 jours).
Si vous ne voulez pas de fichier séparé, vous pouvez également stocker la dernière heure d'exécution dans l'horodatage de modification de votre script. Cela signifie cependant que toute modification de votre fichier de script réinitialisera le compteur 3 et sera traitée comme si le script était en cours d'exécution.
Pour implémenter cela, ajoutez l'extrait ci-dessous en haut de votre fichier de script:
#!/bin/bash
# Minimum delay between two script executions, in seconds.
seconds=$((60*60*24*3))
# Compare the difference between this script's modification time stamp
# and the current date with the given minimum delay in seconds.
# Exit with error code 1 if the minimum delay is not exceeded yet.
if test "$(($(date "+%s")-$(date -r "$0" "+%s")))" -lt "$seconds" ; then
echo "This script may not yet be started again."
exit 1
fi
# Store the current date as modification time stamp of this script file
touch -m -- "$0"
# Insert your normal script here:
Encore une fois, n'oubliez pas d'adapter la valeur de seconds=
à vos besoins ( $((60*60*24*3))
évalue à 3 jours).
*/3
ne marche pas? "si 3 jours ne se sont pas écoulés": trois jours depuis quoi? Veuillez modifier votre question et clarifier.