Как работает cron?

2838
Juanjo Conti

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

Как грива этих строк:

*/1 * * * * python crtip.py parameters 

мой crontab -lможет иметь? Как это работает? Разветвляется ли оно для каждой запланированной работы?

Спасибо,

2
Точно сказать не могу. Речь идет о внутреннем коде cron и о том, как его использовать во время кодирования. Juanjo Conti 14 лет назад 2
* / 1 совпадает с *. Что касается ограничений, я подозреваю, что если вы столкнулись с какими-либо ограничениями на уровне ОС, вы используете его неправильно. Рассматривали ли вы создание демона для выполнения этих задач? ceejayoz 14 лет назад 0
О каком cron-демоне ты говоришь? Я в настоящее время разработчик cron Диллона, и я мог бы дать вам ответ на этот вопрос. Но есть также Vixie cron, fcron, bcron, ... Vixie cron - самый распространенный демон cron в * nix, так что, если я угадаю, думаю, вы об этом говорите. dubiousjim 14 лет назад 2

4 ответа на вопрос

9
sleske

Чтобы ответить на ваши вопросы:

  • Сколько строк может иметь crontab?

Я не знаю ни одного максимального количества строк в crontab. Тем не менее, более нескольких сотен строк, вероятно, довольно необычны (следовательно, не очень хорошо протестированы), а также сложны в обслуживании. Так что я бы, вероятно, избежал превышения этого.

  • Разветвляется ли оно для каждой запланированной работы?

Да.

Тем не менее, на cronсамом деле не часто используется для того, что вы описываете. Если вам нужно вызывать программу так часто и с таким большим количеством различных параметров, возможно, более уместным является написание какого-либо процесса «демон / сервер». Преимущества будут:

  • хорошая, унифицированная регистрация (вместо сообщений, сбрасываемых в журнал cron или отправляемых по почте)
  • больше контроля над тем, когда программы запускаются (и точность более одной минуты)
  • больше производительности, так как вам не нужно всегда разветвляться изнутри
  • проще в обслуживании / установке, чем гигантский crontab

Возможно, вы могли бы описать более подробно, сколько вызовов вам нужно, с какими параметрами и для какой цели. Тогда мы можем помочь лучше.

3
dubiousjim

Вот ответы для одного демона cron, cron Диллона (dcron), разработчиком которого я являюсь. В распространении есть множество демонов cron, и ответы будут разными. Vixie cron, вероятно, самый распространенный; Я не знаю ответов на это.

В любом случае, для cron Диллона пользователь может иметь 256 значащих строк в своем crontab (это настраивается во время компиляции). Root может иметь гораздо больше (я думаю, 65535). Плюс root может иметь несколько crontabs (один в / var / spool / cron / crontabs / root, плюс столько дополнительных, сколько вы хотите в /etc/cron.d/).

Команды Cron запускаются только один раз в минуту, в начале минуты. Вы можете запускать 60 различных команд каждую минуту и ​​просто добавлять к ним префикс sleep 1, sleep 2и так далее. Но я сомневаюсь, что это лучшее решение для того, что вы имеете в виду.

Да, в нашей реализации каждый cronjob разветвляется в отдельный процесс. Если есть какой-либо вывод в stdout или stderr, еще один процесс разветвляется, чтобы отправить его по почте.

2
Janne Pikkarainen

Да, это будет развилка для каждого cronjob. Но если ваш сервер даже умеренно мощный, я думаю, вы не столкнетесь с какими-либо проблемами в ближайшее время. Мои персональные домашние страницы работают на очень старом Pentium III 1,1 ГГц / 512 МБ ОЗУ / медленном IDE HD, и он не страдает от того, что запускает около 15 различных cronjobs каждый час.

Если ваши cronjobs чрезвычайно требовательны к процессору или вводу / выводу, то ваш пробег может варьироваться, но «они работают менее чем за секунду», что заставляет меня думать, что вы не увидите никаких проблем вообще. Давай, подумай что-нибудь более сложное, если время скажет тебе сделать это.

1
Bart M.

У меня была симуляционная проблема, связанная с управлением многими процессами в моем crontab. Я написал один основной скрипт, который перечислял все исполняемые файлы и ссылки в определенной папке (предоставленной в командной строке) и выполнял их последовательно. Этот сценарий я поместил в crontab, например, с параметром «monitor», который будет запускаться каждую минуту и ​​выполнять все сценарии в «$ BASEFOLDER / monitor». Таким образом, вы также можете иметь записи, которые запускаются каждый час, в определенные дни, один раз утром, один раз вечером ...

Мой основной сценарий делает гораздо больше, чем, например, предоставляет определенный гарантированный набор переменных среды, унифицированное ведение журнала и некоторые специфические для приложения вещи, но я надеюсь, что вы поняли идею. Это несколько похоже на систему cron.daily / cron.hourly, которую используют некоторые дистрибутивы.