Como executar um comando aleatoriamente em um determinado intervalo de tempo?

1

Estou interessado em executar um comando Unix uma vez aleatoriamente em um determinado intervalo de tempo.

Por exemplo, se o comando for ls e meu intervalo de tempo estiver entre meio-dia e 2pm, como eu poderia iniciar um processo em segundo plano que executaria ls no plano de fundo uma vez aleatoriamente entre meio-dia e 14h?

    
por George 18.01.2016 / 00:06

2 respostas

1

A maneira mais fácil é usar o comando at . Já que em permite o uso de timespec você pode usá-lo assim:

at 12:00 PM tomorrow + 30 minutes

Então, no seu caso, você gostaria de usar algo assim:

at 12:00 PM tomorrow + $(($RANDOM % 120)) minutes

Depois de inserir esse comando, você pode digitar seus comandos, por exemplo, ls e terminar via ctrl + d

Se você não estiver familiarizado com o comando at, leia este tutorial .

    
por 18.01.2016 / 00:38
1

Para suas intenções, você programa um crontab para o meio-dia e depois dorme um intervalo aleatório entre 0 e 120 segundos (duas horas).

Portanto, a linha crontab para executar um comando todos os dias ao meio-dia é:

* 12 * * * command.sh

e então você inicia o command.sh com:

sleep $(( RANDOM % (120*60) ))

uma alternativa é:

at noon + $(( RANDOM % 120 )) minutes tomorrow

no início do script todos os dias. Escusado será dizer que o último não é a melhor das ideias, pois é obrigado a falhar ao longo do tempo.

    
por 18.01.2016 / 00:21