2

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

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

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

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

Спасибо,

4 ответа4

9

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

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

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

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

Да.

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

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

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

3

Вот ответы для одного демона 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

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

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

1

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

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

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