Планирование работы - crontab лучшее решение?

Я занимаюсь разработкой веб-приложения, которое сильно зависит от планирования работы. Задания будут очень короткими, например, один HTTP-запрос. Однако их будет много. Каждый день может быть запланировано более нескольких тысяч заданий, но не все одновременно. Моим первым желанием было использовать crontab для планирования этих заданий, но я не уверен, что это лучшее решение.

Я вижу, что crontab в основном используется для планирования интенсивных административных задач, но не для очень коротких заданий. Подходит ли crontab для этого? Сможет ли он справиться с таким большим количеством задач? Должен ли я реализовать собственное решение? Существуют ли какие-либо службы, которые могут обеспечить лучшее решение и производительность?

Большое тебе спасибо!


person Denny    schedule 09.06.2011    source источник
comment
Одна вещь, которую я хотел бы иметь в виду, это то, как работа ведет себя, если есть проблема с подключением или какая-то другая проблема. Если есть шанс, что рабочие места перекрываются, вы, вероятно, захотите, чтобы что-то предупредило вас или предприняло какие-то другие действия, если они начнут накапливаться.   -  person robots.jpg    schedule 10.06.2011


Ответы (4)


Cron будет запускать что угодно — длинное или короткое. Однако, если вы собираетесь запускать тысячи заданий в день, вы можете столкнуться с проблемой, что максимальная частота, которую допускает cron, составляет один раз в минуту. Если вам нужна более высокая скорость, вам придется искать другие решения.

Возможная альтернатива Cron — The Fat Controller, который работает как cron, поскольку запускает другие программы, но имеет некоторые преимущества. Толстый контроллер может делать несколько вещей:

  • Демонизируйте все что угодно — дайте ему любой PHP, Python, любой скрипт, даже приложение Java, и его можно превратить в демона в фоновый процесс.

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

  • Повторить что-либо: любой скрипт можно запустить повторно после завершения его выполнения. Вы также можете указать интервал, чтобы он ждал x секунд перед перезапуском (это может быть полезно в вашем случае). Важно отметить, что он ждет x секунд после завершения скрипта перед перезапуском, cron будет ждать x минут после запуска скрипта, поэтому существует вероятность, что может закончиться одновременное выполнение нескольких экземпляров скрипта, что может быть не то, что вы хотите.

В разработке есть и другие функции — проект находится в активной разработке, и я приветствую любые предложения — если они будут интересны, я сделаю все возможное, чтобы их включить!

Сайт: http://www.4pmp.com/fatcontroller/.

Я нахожусь в процессе обновления сайта, поэтому на данный момент он немного уродлив, но есть много информации о конфигурации, начале работы и вариантах использования.

person SlappyTheFish    schedule 09.06.2011
comment
Выглядит неплохо! Одна функция, которая была бы необходима для меня, — это сложное планирование, как это позволяют выражения CRON. - person Denny; 10.06.2011
comment
Что вы можете сделать, так это запустить cron экземпляры The Fat Controller. При запуске в режиме приложения он завершится, как только пакетный скрипт сообщит, что ему больше нечего делать. Я думаю, что на веб-сайте есть пример создания информационных бюллетеней. - person SlappyTheFish; 10.06.2011
comment
Другим вариантом было бы запланировать ваши задания в очередь, сохраненную в таблице БД - возможно, ваш пользовательский интерфейс создает эти задания? Затем толстый контроллер может периодически запускать сценарий, который проверяет, есть ли какие-либо задания в очереди, и, если есть, выполняет их. - person SlappyTheFish; 10.06.2011
comment
Ссылка битая :( - person Juljan; 23.06.2018

Это то, что я использую для своего личного сайта. Конечно, у cron есть возможность запускать длительные задачи, но ни в коем случае нельзя ограничиваться этим.

person JoshuaRogers    schedule 09.06.2011

Cron имеет разрешение в одну минуту; он просыпается только один раз в минуту, чтобы увидеть, нужно ли что-то запускать. Если вам нужно что-то с более жестким разрешением, вам понадобится индивидуальное решение.

Кроме того, если вы делаете это в OS X, вы будете использовать launchd, а не cron. (Хотя cron по-прежнему поддерживается).

person jbruni    schedule 09.06.2011

Моя компания производит CloudQuartz (www.thecloudblocks.com), который позволяет планировать задания через API и получать обратные вызовы, когда они должны бежать.

Мы сделали так, чтобы мы могли планировать задания на кластере серверов, что было невозможно с помощью CRON или планировщика Windows.

person Community    schedule 22.12.2011