Quel est le meilleur moyen d'effectuer une comparaison d'horodatage dans Bash

StackOverflow https://stackoverflow.com/questions/205666

  •  03-07-2019
  •  | 
  •  

Question

J'ai un script d'alerte que j'essaie d'éviter de m'envoyer des spams. J'aimerais donc placer une condition stipulant que si une alerte a été envoyée dans un délai de, disons la dernière heure, ne pas envoyer une autre alerte. Maintenant, j’ai un job cron qui vérifie l’état toutes les minutes parce que je dois être alerté rapidement lorsque cet état est rempli, mais je n’ai pas besoin d’avoir le courrier électronique chaque munite jusqu’à ce que le problème soit maîtrisé. Quelle est la meilleure façon de comparer le temps à bash pour y parvenir?

Était-ce utile?

La solution

De loin, le plus simple est de stocker les horodatages en tant qu'heures de modification des fichiers factices. Les commandes GNU et date 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 date de plus d'une heure:

touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
    #send notification...
    touch last_notification
fi

Autres conseils

Utilisez "test":

if test file1 -nt file2; then
   # file1 is newer than file2
fi

MODIFIER: si vous souhaitez savoir quand un événement s'est produit, vous pouvez utiliser "toucher". pour créer un fichier que vous pourrez comparer ultérieurement à l'aide de "test".

Utilisez la commande date pour convertir les deux heures au format standard et les soustraire. Vous voudrez probablement stocker l’heure d’exécution précédente dans un fichier de points, puis procédez comme suit:

last = cat /tmp/.lastrun
curr = date '+%s'

diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
    # ...
fi

echo "$curr" >/tmp/.lastrun

(Merci, Steve.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top