Tarefa Cron, início aleatório, mas dentro do prazo

9

Eu quero que um script seja executado uma vez por dia, todos os dias, começando entre as 9h e as 12h.
Não estou completamente certo sobre a sintaxe do traço - isso significa que o script será executado TODAS as horas entre 9-12 ou que começará RANDOMLY entre 9-12 ? Porque eu preciso do último.

    
por little_sg 17.01.2015 / 19:45

1 resposta

5

Eu nunca vi uma implementação do cron que tenha uma maneira de executar um job em um horário aleatório. É um requisito estranho. Como a documentação declara, 9-12 é um atalho para 9,10,11,12 e significa toda hora de 9 a 12.

Se você quiser executar um trabalho em um horário aleatório, execute o trabalho no início do intervalo e adicione um atraso aleatório. Por exemplo, para executar em uma hora aleatória entre 9 e 12:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

Note que RANDOM requer bash ou ksh, pode não estar disponível no shell padrão.

Se você deseja executar em um tempo aleatório entre 9 e 12, com a segunda resolução, você pode usar RANDOM % 10800 como o atraso, mas como RANDOM está no intervalo 0.32767, haverá um viés para atrasos entre 0 e 32768% 10800 = 368. Para evitar esse viés:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
    
por 19.01.2015 / 00:24

Tags