CRON начинает переходить на следующую минуту
Я устанавливаю crontab на одну минуту с помощью bash-скрипта для целей нагрузочного тестирования. Нет проблем с выполнением скрипта, и кроны суммируются, и я могу наблюдать, как кроны выполняются через /var/log/cron.
Но проблема в том, что на днях я сообщил сценарию 106 крон, которые он добавил, и они были выполнены великолепно. Но сегодня я сбрасываю crontab с нуля и могу установить только 85 крон. Затем он начинает говорить
crond[31243]: (root) INFO (Выполнение поминутного задания, запланированного на 08:32, отложено на следующую минуту 08:33. Пропуск выполнения задания.)
и в конце концов все кроны начнут пропускаться, и ничего не будет выполнено. Но первоначальный вывод, который я получил, был 106 - это максимальное значение, которое может быть установлено на этом сервере. Но сегодня он сократился до 85. Конфигурации сервера не изменились, такая же среда, как и тогда, когда это было 106
Это из-за слишком частой установки крон или что-то еще. Я новичок в cron и его работе. Пожалуйста помоги
1 ответ
Похоже, вы настраиваете расписание cron с помощью crontab со многими записями с идентичными расписаниями, ожидая, что cron выполнит те, что выполняются параллельно для вас.
* * * * * /path/to/task1
* * * * * /path/to/task2
* * * * * /path/to/task3
...
Это не совсем то , что происходит:
Я знаю, что в большинстве реализаций cronзадачи будут запускаться последовательно, а не параллельно, в порядке, указанном в файле crontab. Крон запустит их один за другим...
Крону не нужно ждать завершения задачи 1, прежде чем запускать задачу 2, но он будет запускать задачу 3 только после запуска задачи 1, задачи 2 и т. Д. После запуска задачи будут выполняться параллельно (до тех пор, пока задачи выполняются).
Задачи, которые должны быть запущены, и нагрузка на систему в данный момент времени ограничат скорость, с которой cron может запускать новые задачи. Когда cron не может запустить все задачи за отведенный промежуток времени и начинается следующая итерация вашего расписания (новая минута), он теряет задачи, которые не могут быть запущены. Это приведет к ошибке:
Выполнение задания поминутной работы, запланированного на 08:32, отложено на следующую минуту 08:33. Пропуск работы
Похоже, вы хотите запустить много одинаковых задач параллельно:
* * * * * /path/to/task
* * * * * /path/to/task
* * * * * /path/to/task
...
просто используйтеparallel
вспомогательная программа к тому что для вас;
* * * * * parallel -j 50 /path/to/task
Обратите внимание, что, когда ваши параллельные задачи не завершаются в течение одной минуты, в следующую минуту запустится 50 дополнительных запусков вашей задачи независимо от того, что при дополнительной загрузке тех задач, которые все еще выполняются, будет работать дольше, чем 1 минута. Через некоторое время ваша система, вероятно, исчерпает ресурсы и станет полностью не отвечает.