Domanda

Ho uno script di avviso che sto cercando di evitare di inviarmi spamming, quindi vorrei porre una condizione che se un avviso è stato inviato entro, diciamo l'ultima ora, per non inviare un altro avviso. Ora ho un lavoro cron che controlla la condizione ogni minuto perché ho bisogno di essere avvisato rapidamente quando la condizione è soddisfatta, ma non ho bisogno di ricevere l'e-mail ogni volta che avrò il problema sotto controllo. Qual è il modo migliore per confrontare il tempo in bash per raggiungere questo obiettivo?

È stato utile?

Soluzione

Di gran lunga il più semplice è memorizzare i timestamp come tempi di modifica dei file fittizi. I comandi GNU touch e date possono impostare / ottenere questi orari ed eseguire calcoli della data. Bash ha dei test per verificare se un file è più recente di ( -nt ) o più vecchio di ( -ot ) un altro.

Ad esempio, per inviare una notifica solo se l'ultima notifica è stata più di un'ora fa:

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

Altri suggerimenti

Utilizza " test " ;:

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

MODIFICA: se vuoi sapere quando si è verificato un evento, puoi utilizzare " toccare " per creare un file che puoi confrontare successivamente utilizzando " test " ;.

Utilizzare il comando date per convertire le due volte in un formato standard e sottrarle. Probabilmente vorrai memorizzare il tempo di esecuzione precedente in un file dot quindi fare qualcosa del tipo:

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

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

echo "$curr" >/tmp/.lastrun

(Grazie, Steve.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top