5

Такое ощущение, что есть варианты использования для вещей, которые вы хотите запускать раз в 5 секунд, два раза в минуту и т.д., Но это невозможно с помощью cron. Почему грануляция cron второго уровня не была встроена в современные операционные системы? (Или есть, и я не знаю ..?)

1 ответ1

13

Короче говоря, совместимость.

Формат, который использует crontab, подробно описан как часть спецификации POSIX. Linux-дистрибутивы, как правило, не на 100% полностью совместимы со спецификациями POSIX, но, как правило, они очень близки, поскольку большинство вещей в спецификации POSIX являются частями Unix-подобной машины, которую разработчики считают само собой разумеющейся как существующую. Что касается Cron, стандартная база Linux довольно прямо указывает, что он должен вести себя в соответствии с POSIX.

Конечно, отдельные дистрибутивы могут изменить Cron, который они используют, но для добавления гранулярности второго уровня потребуется другое поле, что делает новый crontab практически полностью несовместимым практически со всем, что использует Cron.

Но указание на то, что это для совместимости, не дает нам никакого представления о том, почему это гранулярно только на минутном уровне. Итак, почему Cron всегда использовал детализацию на уровне минут?

Ну, меня там не было (и даже не родился в то время), но я подозреваю, что это связано с тем, как Cron был впервые реализован.

Cron в Версии 7 Unix, написанный Брайаном Керниганом, был системной службой (позже названной демонами), вызываемой из /etc /inittab, когда операционная система входила в многопользовательский режим. Его алгоритм был прост:

1.Прочитайте /usr /etc /crontab

2.Определите, должны ли какие-либо команды выполняться в текущую дату и время, и если да, запустите их как суперпользователь, root.

3.Спи одну минуту

4.Повторите с шага 1.

Реализация Cron, основанная на цикле сна, почти наверняка сломалась бы с большей детализацией, чем одна минута; как таковой, Cron пришлось переписать, чтобы использовать более эффективные методы, чтобы иметь возможность обрабатывать нагрузки порядка 100 пользователей. Детализация в одну секунду была бы еще хуже, чем у двух пользователей.

Таким образом, поскольку программа изначально не могла справиться с этим, а формат продолжался, а изменение его было бы довольно большим нарушением совместимости, весьма вероятно, что cron никогда не будет поддерживать субминутную детализацию. Тем более, что, как указывал MichaelT в комментариях, использование команд сна может легко создать желаемое поведение без необходимости изменения самого Cron.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .