У меня есть два скрипта в cron, которые запускаются каждые две минуты: */2
- дело в том, что они не в ногу. Один длится 1,3,5,7,9 минуты и т. Д., А другой - 0,2,4,6,8. Это не критичная проблема, но означает, что у меня есть два отчета о состоянии, один из которых немного устарел по сравнению с другим.
Что именно делает cron? Запустить первый в порядке документа crontab, дожидаясь завершения выполнения второго?
Есть ли способ сделать пробежку одновременно или как можно ближе?
Задание будет выполнено как можно ближе к заданному времени, но может быть выполнено несколько позже. Как предположил Крис, лучше всего, вероятно, создать небольшой сценарий оболочки и запланировать его:
#!/bin/sh
/path/to/job/one &
/path/to/job/two &
В этом случае я запустил их в фоновом режиме, чтобы убедиться, что они работают одновременно или почти одновременно, но в зависимости от вашей системы, ваших требований и т. Д. Вам придется настроить это в соответствии с вашими потребностями.
Также обратите внимание, что в некоторых системах * / 2 не фактически означают только время, кратное 2, но повторяются с шагом, равным 2. Таким образом, если время задания соответствует 1 при первоначальном запуске задания, оно может выполняться затем каждую нечетную минуту, как вы видите, а не каждую четную . Вы можете попробовать что-то вроде:
00-58/2
чтобы заставить задание запускаться только на четных экземплярах, но действительно ли это работает и как это зависит от вашей системы, вашей версии демона cron и т. д. Чтобы получить более подробную помощь, вам нужно будет предоставить эту информацию :)
Мне кажется, что лучше всего объединить два сценария в один, чтобы гарантировать, что они запускаются почти в одинаковое время.
Другой вариант, помимо создания третьего (внешнего) сценария, - объединить оба отчета в одну командную строку и поместить ее в cron:
*/2 * * * * /path/to/job1 ; /path/to/job2
Нет, crontab периодически проверяет cron для обновления своего расписания. Расписания в каждой строке crontab чередуются в глобальное расписание. Если у вас есть строка 1,3,5,7,9 и строка 2,4,6,8,10, вы получите результат 1,2,3,4,5,6,7,8,9, 10.
Из Википедия Алгоритм, используемый (классическим) cron, следующий:
Войдите в основной цикл:
Если вы получите копию vixie cron (который, вероятно, вы используете), вы, вероятно, сможете посмотреть исходный код. Я предполагаю, что вы получаете смещение отчетов из-за ошибок округления в расчетах (спит минимум одну минуту).