Pergunta

Eu tenho um script de alerta que estou tentando não me spam assim que eu gostaria de colocar uma condição que, se um alerta foi enviado dentro, dizer a última hora, para não enviar outro alerta. Agora eu tenho um trabalho cron que verifica a condição de cada minuto, porque eu preciso ser alertado rapidamente quando a condição for atendida, mas eu não preciso de obter o e-mail sempre munite até que eu comece a questão sob controle. Qual é a melhor maneira de comparar o tempo em bash para conseguir isso?

Foi útil?

Solução

De longe, o mais fácil é para armazenar carimbos de tempo como horas de modificação de arquivos fictícios. touch e date comandos GNU pode definir / obter esses tempos e realizar cálculos de data. Bash tem testes para verificar se um arquivo é mais recente que (-nt) ou mais velho que (-ot) outro.

Por exemplo, para enviar apenas uma notificação se a última notificação foi mais de uma hora atrás:

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

Outras dicas

Use "teste":

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

EDIT:. Se você quer saber quando um evento ocorreu, você pode usar o "toque" para criar um arquivo que você pode depois comparar com "teste"

Use o comando data para converter as duas vezes em um formato padrão, e subtrair-los. Você provavelmente vai querer armazenar o tempo de execução anterior em uma dotfile em seguida, fazer algo como:

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

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

echo "$curr" >/tmp/.lastrun

(Obrigado, Steve.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top