Что я должен использовать для простого управления заданиями cron в проекте PHP? - PullRequest
5 голосов
/ 09 февраля 2011

Я хочу простое cron-подобное управление в PHP-проекте Есть некоторые вещи, которые я хотел бы иметь:

  1. php job worker - это простой скрипт, который помещается в некоторый подкаталог в каталоге проекта
  2. есть поддерево типа / cron / daily, / cron / month ... и т. Д. В корне проекта, который содержит все эти рабочие
  3. нет необходимости связываться с crontab с каждым добавленным рабочим.
  4. все сценарии запускаются чем-то вроде частей выполнения с соответствующей частотой, а их соответствующие выходные данные записываются в отдельные файлы, такие как /var/log/projectname/cron/daily/somescript.log
  5. было бы здорово иметь / cron / daemon dir, содержащий сценарии, которые должны выполняться бесконечно (минутно), но не более 1 экземпляра

У меня был опыт работы с такой системой планирования в одном проекте, и он мне понравился. Это обеспечивает много опрятных вещей:

  • задания являются сценариями проекта и находятся в директории проекта, отслеживаемой git.
  • нет необходимости использовать crontab.
  • журналы отсортированы.
  • Демоны легко построить.

Я бы просто использовал / bin / run-parts в подкаталогах проекта / cron, но мне не удалось разделить журналы так, как я хотел. И разделенная регистрация - очень хорошая особенность.

Итак, я просто думал, что такого рода системы создавались много раз раньше, есть ли какое-нибудь готовое решение для проекта PHP? По сути, это просто более умный эквивалент частей выполнения. Нужно просто написать еще раз?

P.S. Есть много других конкретных решений, таких как Gearman. Они великолепны, но этот вопрос о проекте cron для рабочих мест.

Ответы [ 3 ]

2 голосов
/ 23 марта 2011

Мы приняли немного другой подход к моей текущей работе.Мы используем Jenkins (ранее Hudson) для нужд планирования PHP.Это хорошо, потому что вы можете использовать существующую инфраструктуру для уведомлений (jabber, электронная почта и т. Д.), И она стоит рядом с другими нашими работами по сборке для выпусков кода.Также есть возможность наблюдать за выходом консоли в режиме реального времени, получать стенограммы каждого прогона и т. Д.

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

Вот пост об организации пакетных заданий PHP для использования с Jenkins или Hudson:

http://blog.shupp.org/2011/03/15/organizing-php-batch-jobs/

0 голосов
/ 20 апреля 2011

Используйте эту функцию:

function parse_crontab($time, $crontab)
         {$time=explode(' ', date('i G j n w', strtotime($time)));
          $crontab=explode(' ', $crontab);
          foreach ($crontab as $k=>&$v)
                  {$v=explode(',', $v);
                   foreach ($v as &$v1)
                           {$v1=preg_replace(array('/^\*$/', '/^\d+$/', '/^(\d+)\-(\d+)$/', '/^\*\/(\d+)$/'),
                                            array('true', $time[$k].'===\0', '(\1<='.$time[$k].' and '.$time[$k].'<=\2)', $time[$k].'%\1===0'),
                                            $v1
                                           );
                           }
                   $v='('.implode(' or ', $v).')';
                  }
          $crontab=implode(' and ', $crontab);
          return eval('return '.$crontab.';');
         }
var_export(parse_crontab('2011-05-04 02:08:03', '*/2,3-5,9 2 3-5 */2 *'));
var_export(parse_crontab('2011-05-04 02:08:03', '*/8 */2 */4 */5 *'));
0 голосов
/ 28 февраля 2011

Периодический - CRON-совместимый диспетчер задач , написанный на PHP. Чтобы заставить его работать так, как вы этого хотите, еще предстоит проделать определенную работу, но это должно дать вам хорошую основу.

...