No linux, seria possível executar um script todos os dias 3 minutos depois do dia anterior?

4

Minha primeira solução para isso foi executar date +%Y%m%d%H%M e colocar esse formato de números em um arquivo, e executar o script a cada minuto do cron. Então, se a data do arquivo corresponder ao comando date, o script faria alguma coisa. Em seguida, atualizaria esse arquivo para o próximo dia, mais 3 minutos. Existe uma maneira melhor de conseguir isso?

O resultado seria que o script seria executado no primeiro dia (por exemplo) às 4:00 da manhã, e o segundo dia seria às 04:03 e o terceiro dia às 4:06. Ele seria executado a cada minuto, mas apenas executado (se bloco) no momento correto.

A questão e minha solução estão claras?

    
por Elmer 04.06.2012 / 06:28

3 respostas

5

Você pode usar o comando at de dentro do seu script (ou de um wrapper). Dê tempo para executar a próxima iteração.

echo '/dir/scriptname' | at 'now + 1443 minutes'

Coloque essa linha o mais próximo possível do início do script para reduzir o desvio.

    
por 04.06.2012 / 06:41
2

Você deve usar at em vez de cron , ele permitirá que você execute a tarefa exatamente uma vez. Poderia então reprogramar a si mesmo.

Bem, eu gostaria de sugerir algumas melhorias para sua própria solução - se você mantiver isso. No entanto, ainda será necessário executar o script a cada minuto via cron :

Em vez de manipular qualquer configuração ou rastreamento quando o script foi executado pela última vez, você pode atingir o mesmo objetivo com o carimbo de data / hora do UNIX:

Um dia tem 60*60*24 = 86400 segundos. Se você adicionar 3*60 = 480 de seus requisitos, terá 86880 segundos - e esse é exatamente o intervalo que você deseja que seu script seja executado. Dentro do script, você pode agora verificar se a% do tempo atual do UNIX (modulo) é igual a zero e abortar de outra forma.

Se você precisar ter uma primeira execução explícita, como 5 de junho de 2012, 4:00, poderá subtrair o registro de data e hora associado ( 1338861600 ) da hora local primeiro, verifique se não é menor que zero e prossiga com a diferença ...

Naturalmente, você também pode permitir que o script modifique sua própria crontab entry, mas isso é arriscado e também um pouco estranho.

    
por 04.06.2012 / 06:55
0

Você pode modificar seu script para verificar algum arquivo de sinalização com tempo para ser executado primeiro. Se o tempo coincidir com a hora de início, o seu script continua, caso contrário, ele termina com a saída 0. E você pode iniciá-lo no cron mesmo a cada minuto (ou uma vez a 3 minutos, parece ser suficiente para o seu caso). Além disso, você precisa do seu script para modificar o tempo da próxima execução no arquivo de sinalização. Isso é seguro o suficiente e você não perderá nenhum horário de início, mesmo em caso de reinicialização aleatória.

    
por 04.06.2012 / 10:27