Вопросы по работе крона и задач, а также о времени работы PHP-скрипта

Главные вкладки

Аватар пользователя Nicebit Nicebit 17 апреля 2014 в 21:58

Изучаю функцию drupal_cron_run() (сайт подставляет ссылку на 6-ю версию, но рассматривается 7-я).

1) Нашёл комментарий про то, что можно изредко дёргать основной крон. А для частого запуска задач (queue) создать отдельный файл. Вроде нормальный вариант, но решил подстраховаться и спрошу: А может есть ещё варианты отдельного запуска задач, чтобы не тревожить паровоз крон?

2) Если два модуля добавят свои задачи, и каждый запросит на выполнение 3 минуты, то в целом задачи будут выполняться 6 минут. Это считается работой одного PHP-скрипта или они считаются по отдельности? То есть сработает ли PHP-ограничение max_execution_time, которое, например, установлено на 4 минуты?

Комментарии

Аватар пользователя Nicebit Nicebit 17 апреля 2014 в 23:13

2) Проверил на практике в виртуалке (Quickstart).
Создал queue_info со временем 600 и несколько задач с usleep в 100 секунд. Задачи отработали все 6 минут, хотя phpinfo() показывает, что max_execute_time равно 300.
После эксперимента полез читать разные материалы про несрабатывание ограничения. Может кто подскажет хорошую статью на эту тему?

Аватар пользователя Ch Ch 18 апреля 2014 в 8:28

Ну все правильно, зачем для консольного скрипта max_execution_time?
Если Drush API в не нужно, то можно положить все эти php скрипты в какую нибудь директорию и запускать их через drush src.
Ещё одна причина запускать крон через драш, то что можно для каждой команды задать точное время (период) запуска. Через hook_cron это сделать сложнее (есть специальные модули).

Аватар пользователя Nicebit Nicebit 18 апреля 2014 в 9:25

webpavilion, в эксперименте крон дёргал через http://example.ru/cron.php?cron_key=...
Спасибо за подчёркивания, момент про системные операции упустил из виду. Как понимаю, функция usleep передаёт работу системе, поэтому скрипт спокойно отработал без ограничения. Попозже поэкспериментирую, чтобы PHP-скрипт постоянно работал сам.

Ch, почитал мельком про drush scr интересно, учту на будущее. Читая ваш комментарий под статьёй из первой ссылки, не думал, что запускать по drush на столько проще. Но пока нужен родной друпаловский крон.

Если описать конкретную задачу, то я изучаю периодический импорт RSS через модуль Feeds. А Feeds уже использует job_schedule, который собственно и ставит задачи в нужное время.
Мне нужно периодически импортировать примерно 40 RSS. Чтобы распределить процесс во времени и не дёргать весь крон, создал отдельный файл, где запускаю только feeds_cron, job_schedule_cron и выполнение задач.
Про max_execute_time спрашиваю, чтобы импорт не оборвался в случае большого xml. Пока больших xml не предполагается, но страхуюсь на всякий случай.