Como executar o script bash apenas se passar um dia? [duplicado]

0

Gostaria de executar meu script com frequência (não pelo cron, mas manualmente), mas algumas partes lentas, como apt-get update && apt-get -y upgrade , devem ser executadas no máximo uma vez por dia.

Eu acho que para salvar o último tempo de execução em /tmp/last_update.txt e verificar se é mais do que now - 86400 , mas não consigo entender como torná-lo legal com o bash.

Cron não é aceito - é perigoso executar essas ações sem verificar o aplicativo depois disso. Além disso, durante essas tarefas, o aplicativo fica instável e não é necessário executá-lo todos os dias - somente ao executar o script manualmente (implantando um aplicativo), mas não com mais frequência do que uma vez por dia.

Exemplo:

some-fast-command-1

if [ not-run-command-2-for-24h ]; then
    some-slow-command-that-makes-app-unstable

    date > /tmp/last-run-command-2 # save last run time somehow
fi

some-fast-command-3

Como escrever not-run-command-2-for-24h condiciona o bash?

No PHP eu fiz algo parecido com

<?php
$filename = '/tmp/last-run-command-2';
$needRun = (!is_file($filename) && time() > file_get_contents($filename) + 86400);
if ($needRun) {
    run();
    file_put_contents($filename, time());
}
    
por luchaninov 30.05.2016 / 19:42

1 resposta

0

Encontrei uma resposta: link

Você pode obter o timestamp atual:% now=$(date --date=$(date --iso-8601) +%s 2>/dev/null)

Carregar timestamp do arquivo:
stamp=$(date --date=$(date -r $stamp_file --iso-8601) +%s 2>/dev/null)

Compare: delta=$(($now-$stamp)) e interval=$(($interval*60*60*24)) e if [ $delta -ge $interval ]; then

    
por luchaninov 30.05.2016 / 20:11