Executando um script via cron em um tempo aleatório, mas um certo número de vezes por dia [closed]

0

Eu quero ser capaz de executar meu script, digamos, 2 ou 3 vezes por dia - 24 horas - mas em um horário diferente a cada vez.

O que você recomendaria uma solução simples e confiável ?

    
por Jodooomi 28.12.2016 / 07:17

2 respostas

2

Para executar o script duas vezes por dia:

0 0,12 * * * sleep $(( $$ \% 21600 )); /path/to/script.sh

Isso iniciará o trabalho ao meio-dia e à meia-noite e, em seguida, suspenderá por até 6 horas (metade do intervalo de 12 horas) antes de iniciar o script.

Para executar o script 3 vezes por dia:

0 0,8,16 * * * sleep $(( $$ \% 14400 )); /path/to/script.sh

Isso iniciará o trabalho à meia-noite, às 8h e às 16h e depois durará até quatro horas (metade do intervalo de oito horas) antes de iniciar o script.

Desde que você marcou isto com o Ubuntu, você provavelmente tem o bash como padrão / bin / sh, que parece interpretar $ RANDOM (apesar de RANDOM não ser especificado pelo POSIX), então para maior imprevisibilidade, ajuste a resposta de Zwans para:

2 execuções por dia:

0 0,12 * * * sleep $(( RANDOM \% 21600 )); /path/to/script.sh

3 execuções por dia:

0 0,8,16 * * * sleep $(( RANDOM \% 14400 )); /path/to/script.sh

Alterei o && para ; , que altera o significado de "aguarde até que o comando suspender saia com êxito" para "dormir por algum tempo, independentemente de o sono ter sido concluído ou ter sido eliminado". Observe também que o % precisa ser escapado quando faz parte de um comando cron, caso contrário, ele é interpretado como uma nova linha.

    
por 29.12.2016 / 21:10
-1

0 */12 * * * sleep $((RANDOM%x)) && /bin/sh -c /path/to/script.sh

Seu atraso será entre 0 e x , por isso, defina esse valor por conta própria. Isso deve ser executado a cada 12 horas, com um atraso aleatório.

Certifique-se de que isso seja executado usando bash .

    
por 28.12.2016 / 09:16