Qual é a melhor maneira de realizar Timestamp Comparação em Bash
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?
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.)