Будет ли cron.daily ждать окончания работы, прежде чем начинать следующую?

На этой странице http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration предлагается переименование /etc/cron.daily/logrotate, поэтому оно следует после /etc/cron.daily/webalizer - webalizer должен быть выполнен до того, как будет запущен logrotate.

Это правда? Будет ли cron.daily ждать окончания работы, прежде чем начинать следующую?

2 ответа

Решение

Сценарии в cron.daily а остальные выполнены с использованием run-parts если anacron не установлен. Вы можете увидеть это в /etc/crontab:

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

run-parts выполнит каждый исполняемый файл в каталоге и будет ждать завершения каждого из них, прежде чем запускать следующий. Вот тест с использованием этих двух скриптов:

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


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

Выход:

$ 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

Это отличается от планирования каждого задания в cron, которое будет запускать их параллельно, если они перекрываются.

Я только что создал тестовое задание cron, которое выполняется каждую минуту:

#!/bin/bash

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

sleep 100

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

Так что я видел наложение в htop, Я имею в виду, что были периоды времени, когда я видел два процесса, запущенных одновременно. 123 повторили в начале минуты и 234 было отражено в 40 секунд следующей минуты (из-за sleep 100). За 40 секунд до начала следующей минуты был только один процесс.

Это означает, что cron запускает задания и не ждет их завершения.

Я постараюсь представить это графически:

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

По крайней мере, это верно для рабочих мест в /etc/crontab с vixie-cron на свежем обновленном Gentoo.

Как обнаружил Пол - вещи в cron.daily выполняет по-другому.

Другие вопросы по тегам