tarefas cron com o mesmo tempo de execução

8

Suponha que eu tenha vários trabalhos cron configurados para execução ao mesmo tempo: eles são executados em paralelo ou apenas um após o outro?

(Meu caso é o Debian squeeze com cronjobs dentro de /etc/cron.d/mycronjobs).

Gabriele
fonte

Respostas:

7

Para completar, os trabalhos em, por exemplo, /etc/cron.{hourly,daily,weekly,monthly}, são executados sequencialmente. O script de partes de execução faz um loop em todos os arquivos neste diretório.

02 4 * * * root run-parts /etc/cron.daily

Portanto, você pode usá-lo em combinação com uma convenção de nomenclatura (semelhante à numeração, /etc/init.d/rc*.dpor exemplo) para garantir que os trabalhos sejam executados sequencialmente.

Bram
fonte
E se eu tiver vários trabalhos cron dentro do mesmo arquivo, definidos para serem executados ao mesmo tempo?
Gabriele
Não sei o que você quer dizer com "dentro do mesmo arquivo". Mas se você quer dizer que possui várias linhas com a mesma especificação de tempo (como a que 0 * * * *você postou anteriormente), assim como outras postaram, não há garantia na ordem em que serão executadas. Elas podem ser executadas paralelamente em um sistema com vários núcleos, AFAIK a ordem em que são executados pode até ser diferente a cada dia. A convenção de nomenclatura que mencionei em combinação com partes de execução ou o uso de um script mestre que chama os scripts de backup reais é a única maneira de garantir que os scripts sejam executados em uma ordem específica.
Bram
Ok, então, como eu preciso ter certeza de que meus scripts serão executados um após o outro, acho que vou usar um "script mestre" acionado por um trabalho cron e chamar os scripts de dentro do script principal.
Gabriele
5

As tarefas listadas no cron serão executadas em paralelo, exatamente como os processos. Não há como ter certeza de qual será iniciado primeiro e no cron para garantir que a tarefa A seja concluída antes do início da tarefa B.

Sirch
fonte
1
Você pode garantir que a tarefa A seja concluída antes que a tarefa B inicie, listando-as na mesma linha e separando-as com um ponto e vírgula.
077 Nicholas
Isso não significa que a tarefa A foi concluída com êxito. Talvez você possa usar um &&, mas qualquer coisa assim deve ser executada por um script chamado.
Sirch
Você pode usar qualquer operando que o bash shell suporte. Usando &&, ||, ou; no cron é uma prática comum na minha experiência.
Nicholas
2

Cron é um daemon (serviço) que é executado continuamente; no entanto, ele lê crontabs uma vez por minuto.

A sequência exata em que os trabalhos são executados dependerá da implementação da situação de seus sistemas.

Os arquivos soltos que algumas distribuições colocam dentro do /etc/cron.d/ são verificados quanto às configurações do cron timer, pois esses arquivos seguem a sintaxe normal do crontab (5).

A ordem em que os trabalhos individuais são executados depende da programação que você definiu para eles, obviamente.

adaptr
fonte
E se o planejamento for definido assim: ---- 0 * * * * raiz sh / var / opt / backup_scripts / backup1 - 0 * * * * raiz sh / var / opt / backup_scripts / backup2 ---- executar sequencialmente, ou seja, backup1 e, quando terminar, backup2?
Gabriele
A sequência exata em que os trabalhos são executados dependerá da implementação da situação de seus sistemas. man cron para detalhes.
adaptr
O man cron não declara nada sobre isso (pelo menos no Debian).
Gabriele
2

Eles serão executados em paralelo. Você pode usar os seguintes métodos para executar os processos sequencialmente.

# Use a semicolon to run command2 after command1 has completed
02 4 * * * /path/to/command1 ; /path/to/command2

# Use two ampersands to run command2 after command1 has completed successfully.
02 4 * * * /path/to/command1 && /path/to/command2

# Use two vertical rules to run command2 after command1 has completed unsuccessfully.
02 4 * * * /path/to/command1 || /path/to/command2
Nicholas
fonte