Digamos que eu tenha vários scripts cron que precisam ser executados a cada 15 minutos. Eu poderia configurá-los para executar:, */15 * * * *
mas todos eles correm ao mesmo tempo. Parece bobagem o servidor ficar ocioso por vários minutos e, de repente, tentar executar uma dúzia de scripts, tudo ao mesmo tempo.
Existe uma maneira de executar um script no minuto 1, 16, 31, 46 e outro no 2, 17, 32, 47?
Em outras palavras, quero que cada script seja executado a cada 15 minutos, mas não me importo que eles sejam executados especificamente nas marcas de quarto de hora.
run-parts
também está presente nos sistemas Fedora / Red Hat.A maneira mais direta de fazer isso é apenas configurar manualmente os comandos para serem executados quando você desejar:
Ou você pode escrever um script para gerar automaticamente as entradas apropriadas do crontab (que evitam erros de digitação).
Algumas versões do cron (provavelmente a que você está usando) aceitam uma sintaxe estendida:
fonte
Cron não é realmente bom no que você está tentando fazer. Você já pensou em escrever um script que atua como um daemon que basicamente dorme 15 minutos, executa o comando e depois faz um loop?
fonte
sleep 300
entre cada execução do comando, a própria execução do comando fará com que o tempo se desvie; pode ser executado a cada 15:10 e não a cada 15:00. E se o processo em segundo plano morrer ou o sistema reiniciar, ao contráriocrond
, ele não será reiniciado automaticamente. Existem maneiras de "daemonizar" um processo em segundo plano, mas você está praticamente reimplementandocrond
.run-parts
que seja fornecido com a maioria das instalações cron para fazer isso especificamente. Veja a resposta de @ AndrewSchulman.Muitas distribuições têm o /etc/cron.d/cronhourly, para o qual todos os scripts são executados a cada hora. Você pode até especificar a ordem iniciando-os com números seqüenciais, como 01scriptA 02scriptB - deve ser trivial com o conhecimento de cron que você já tem que fabricar um "cronhourlybyfour" como o chamamos na base de distribuição linux do Smoothwall :)
Palavra de aviso: usa peças de execução como sugerido anteriormente, e as peças de execução NÃO gostam de scripts com a. no nome, então não chame "deletehomefolders.sh" chame "01deletehomefolders" e certifique-se de começar com o # certo! linha para o que você pretende interpretar seu script.
fonte