Anacron, executa o job quantas vezes tiver perdido

3

Se eu agendar um trabalho para ser executado às 3 da manhã. todos os dias e é perdido 3 dias seguidos, o Anacron irá executá-lo 3 vezes quando o sistema voltar a funcionar, ou apenas uma vez?

Se for executado apenas uma vez, existe uma maneira de executá-lo várias vezes?

    
por pHeoz 26.06.2015 / 15:22

2 respostas

1

Se você quiser garantir que um programa seja executado quantas vezes o número de dias perdidos enquanto o sistema estava inoperante, você pode colocar seu comando em um bash script como abaixo e use uma entrada diária habitual cron ou anacron.

Comece por anotar num ficheiro, por ex. date.of.lastrun o número de dias desde a época (isto é, desde 1º de janeiro de 1970), quando o programa foi executado pela última vez. Você pode ter este valor para hoje com:

echo $(($(date +%s)/86400))

Quando o cron executa este script, ele lê esse número do arquivo, calcula o número de hoje e repete seu comando até que eles correspondam, atualizando o arquivo de cada vez.

let today=$(date +%s)/86400
lastrun=$(<date.of.lastrun)
if [ ! -z "$lastrun" ]
then    while [ $lastrun -lt $today ]
        do    echo "run the command for $(($today-$lastrun)) days back"
              # do your command ...
              let lastrun+=1
              echo $lastrun >date.of.lastrun
        done
else          echo 'you need to: echo $(($(date +%s)/86400))  >date.of.lastrun'
fi
    
por 26.06.2015 / 19:06
0

Não é possível assim, no entanto, você pode converter sua tarefa cron desejada em um script CGI executado pelo Apache e chamá-la de um servidor externo mais estável.

Como alternativa, você pode registrar cada execução de trabalho em algum arquivo e, em seguida, gravar o analisador para esse arquivo de log, que executará o trabalho em dias ausentes.

    
por 26.06.2015 / 15:40

Tags