Será que o cron espera a conclusão dos trabalhos antes de iniciar o próximo?

5

Esta página link sugere renomear /etc/cron.daily/logrotate para que ele apareça depois do /etc/cron.daily/webalizer - o webalizer deve ser feito antes que o logrotate entre em ação.

Isso é verdade? Será que o cron.daily espera que os trabalhos terminem antes de iniciar o próximo?

    
por commonpike 05.01.2014 / 23:22

2 respostas

5

Os scripts em cron.daily e os outros são executados usando run-parts if anacron não está instalado. Você pode ver isso em /etc/crontab :

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

run-parts executará cada executável no diretório e aguardará a conclusão de cada um antes de executar o próximo. Aqui está um teste usando esses dois scripts:

$ cat cron/1test
#!/bin/bash
date
echo script1
sleep 10
date


$ cat cron/2test
#!/bin/bash
date
echo script2
sleep 10
date

Saída:

$ run-parts --verbose cron
run-parts: executing cron/1test
Monday 6 January  10:38:42 EST 2014
script1
Monday 6 January  10:38:52 EST 2014
run-parts: executing cron/2test
Monday 6 January  10:38:52 EST 2014
script2
Monday 6 January  10:39:02 EST 2014

Isso difere do agendamento de cada trabalho no cron, que os executará em paralelo se eles se sobrepuserem.

    
por 06.01.2014 / 00:47
1

Acabei de criar uma tarefa do cron para testes que é executada a cada minuto:

#!/bin/bash

echo "123" >> /home/user/test-file

sleep 100

echo "234" >> /home/user/test-file

Então, eu vi a sobreposição em htop . Quer dizer, houve períodos em que vi dois processos sendo executados simultaneamente. 123 foi ecoado no início do minuto e 234 foi ecoado aos 40 segundos do minuto seguinte (por causa de sleep 100 ). No período de 40 segundos até o início do próximo minuto, houve apenas um processo.

Isso significa que o cron dispara tarefas e não espera que elas sejam concluídas.

Vou tentar representá-lo graficamente:

0 minute 00 seconds 123 <----first execution
1 minute 00 seconds 123 <----second execution
1 minute 40 seconds 234 <----first execution
2 minute 00 seconds 123 <----third execution
2 minute 40 seconds 234 <----second execution
3 minute 00 seconds 123 <----fourth execution
3 minute 40 seconds 234 <----third execution

Pelo menos isso é válido para trabalhos no /etc/crontab com vixie-cron no novo Gentoo atualizado.

Como Paul descobriu - o material em cron.daily é executado de maneira diferente.

    
por 05.01.2014 / 23:37