Quero que dois trabalhos sejam executados em algum momento todos os dias, em série, exatamente na ordem especificada. Esse crontab fará de forma confiável o que eu quero?
@daily job1
@daily job2
Estou assumindo que eles correm um após o outro, mas eu era incapaz de encontrar a resposta através de pesquisa na Web ou de qualquer um desses manpages: cron(1)
, crontab(1)
, crontab(5)
.
O crontab acima obviamente não fará o que eu quero se o cron executar as tarefas agendadas @daily
em paralelo ou em uma ordem imprevisível.
Eu sei que posso simplesmente criar um script de shell para dispará-los em ordem, só estou curioso para saber como o cron deve funcionar (e estou com preguiça de reunir dados de teste ou ler o código-fonte).
Cron é fornecido pelo cron
pacote. O sistema operacional é o Ubuntu 10.04 LTS (servidor).
cron
pacote? Quase todos os daemons cron que conheço lidam com isso em ordem e, de forma síncrona, geralmente analisam primeiro cada arquivo em ordem alfabética (embora alguns o façam pelo período de tempo entre as execuções em ordem crescente) e depois os trabalhos dentro em ordem de linha.Respostas:
Depois de uma rápida olhada na fonte (no Debian squeeze, que eu acho que é a mesma versão), parece entradas dentro de um determinado arquivo e com os mesmos tempos são executados em ordem. Para esse propósito,
@daily
e0 0 * * *
são idênticos (na verdade,@daily
são idênticos a0 0 * * *
este cron).Eu não confiaria nisso de maneira geral. É possível que um dia alguém decida que o cron deve executar tarefas em paralelo, para aproveitar essas CPUs de 32 núcleos que possuem 31 núcleos ociosos. Isso pode ser feito ao implementar esse item de tarefa de 20 anos encontrado na fonte cron:
É muito fácil escrever
@daily job1; job2
aqui. Se for importante que os trabalhos sejam executados em ordem, faça disso uma conseqüência direta do que você escreve.Além disso, tornar a ordem explícita elimina o risco de um futuro administrador reordenar as linhas, pensando que isso não será importante.
fonte
http://ss64.com/osx/crontab.html (assim como outras referências) afirma que @daily é equivalente a
que diz para correr à meia-noite. Eu esperaria que duas linhas desse tipo fossem lançadas o mais próximo possível da meia-noite, sem garantia de qual seria a primeira execução. Eu concordo com a sugestão de jw013 em seu comentário:
fonte
O @Giles comenta o uso de um único script quando é importado para executar as coisas em ordem, é apropriado.
cron.daily
arquivos não especificam tempos de execução. Foi minha experiência que eles são executados em série. Isso faz sentido como muitos trabalhos em segundo plano que podem ser executados em um laptop ou outro sistemaQuando os horários são especificados, todos os trabalhos agendados para o minuto atual são executados. É uma boa ideia usar horários diferentes.
Se você tiver trabalhos mutuamente exclusivos, é comum usar um arquivo de bloqueio para determinar se o outro trabalho está em execução.
fonte
@daily
é um pouco diferente de/etc/cron.daily
. O primeiro é uma sintaxe alternativa para uso em um crontab. Também dê uma olhadarun-parts
. Meu sistema usarun-parts
para executar programas/etc/cron.daily
. De acordo com a página derun-parts(8)
manual, "Os arquivos são executados na ordem de classificação lexical de seus nomes ...".