Execute o programa x minutos depois de terminar

4

Minha pergunta é relacionada a um cron job, mas não tenho certeza.

Digamos que eu tenha um script ( /home/me/myscript.sh ) que faça algo, que pode levar um tempo indeterminado para ser concluído, digamos um intervalo entre 10 minutos a uma hora. O que eu quero é que o script seja executado e, quando terminar, volte a ser executado em uma hora. Existe algum tipo de "agendador" ou algo que eu poderia usar para conseguir isso? Estou usando o Ubuntu.

    
por TMH 30.09.2015 / 17:45

2 respostas

3

cron parece inadequado para isso; uma hora após a conclusão da execução anterior pode ser feita através de um while loop

#!/bin/sh
while :; do
    some_job_that_takes_a_while
    sleep 3600
done

ou agendando a próxima execução em uma hora por meio de at(1) no final do trabalho.

$ cat atat
#!/bin/sh
echo running the job
echo $HOME/atat | at now + 1 hours
$ ./atat
running the job
job 4 at 2015-09-30 17:00
$ date
Wed Sep 30 16:00:19 UTC 2015
$ 

Pode ser necessário haver verificações de integridade ou um timeout no trabalho, caso ele seja interrompido e, assim, nenhum trabalho subseqüente seja executado até que alguém o mate manualmente e reinicie as coisas.

    
por 30.09.2015 / 18:01
1

A abordagem mais simples seria dizer ao cron para fazer isso. Apenas use isso como o comando que o cron executará:

/home/me/myscript.sh; sleep 1h; /home/me/myscript.sh

Se o seu sleep não suportar o sufixo h , use sleep 3600 .

Como alternativa, escreva um script de wrapper, chame-o de wrapper.sh :

#!/usr/bin/env bash

/home/me/myscript.sh
sleep 1h 
/home/me/myscript.sh

E execute isso com o cron.

    
por 30.09.2015 / 17:59