J'ai un script d'alerte que j'essaie d'empêcher de me spammer, donc je voudrais placer une condition selon laquelle si une alerte a été envoyée dans, disons la dernière heure, pour ne pas envoyer une autre alerte. Maintenant, j'ai un travail cron qui vérifie la condition toutes les minutes parce que je dois être alerté rapidement lorsque la condition est remplie, mais je n'ai pas besoin de recevoir l'e-mail pour chaque munite jusqu'à ce que le problème soit maîtrisé. Quelle est la meilleure façon de comparer le temps passé en bash pour y parvenir?
Le plus simple est de loin de stocker les horodatages comme heures de modification des fichiers factices. GNU touch
et date
les commandes peuvent définir/obtenir ces heures et effectuer des calculs de date. Bash a des tests pour vérifier si un fichier est plus récent que (-nt
) ou plus ancien que (-ot
) un autre.
Par exemple, pour envoyer une notification uniquement si la dernière notification remonte à plus d'une heure:
touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
#send notification...
touch last_notification
fi
Utilisez "test":
if test file1 -nt file2; then
# file1 is newer than file2
fi
EDIT: Si vous voulez savoir quand un événement s'est produit, vous pouvez utiliser "touch" pour créer un fichier que vous pourrez comparer plus tard en utilisant "test".
Utilisez la commande date pour convertir les deux fois dans un format standard et soustrayez-les. Vous voudrez probablement stocker le temps d'exécution précédent dans un fichier dot, puis faire quelque chose comme:
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(Merci, Steve.)