Cron

Настроить cron (выполнение задач по расписанию) можно в контрольной панели на странице “Сайты” - справа ссылка “Редактировать cron”.

Формат записи

* * * * * выполняемая команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

Каждое поле допускает перечисление через запятую и периодичность, например:

Пример командыЧто она делает
5,15,35 * * * * some-commandзапуск some-command в 5, 15 и 35 минут каждого часа каждого дня каждого месяца в каждый день недели
5-10,35-40 * * * * some-commandзапуск раз в минуту с 5ой до 10ой и с 35ой до 40ой минуты каждого часа
*/5 * * * * some-commandзапуск каждые пять минут

Мы рекомендуем не запускать задачи чаще, чем раз в 15 минут

Мы рекомендуем в начало списка задач добавлять следующие строки:

# m h  dom mon dow   command
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""

Защита от повторного запуска

В большинстве случаев не известно сколько времени будет выполняться задача и различные внешние факторы могут на это влиять. Иногда, особенно если задача запускается очень часто (например раз в 1-5 минут) может возникнуть ситуация, когда команда еще не успела отработать первый раз, но уже запускается повторно.

Это может приводить к различным проблемам, включая проблемы с нагрузкой и недоступностью сайта, поэтому в большинстве случаев очень важно, чтобы задача, запущенная в кроне не была запущена повторно, если есть хоть какая-то вероятность, что она может работать долго. Некоторые скрипты сами поддерживают это через, например, создание pid файлов, но большинство популярных задач, такие как запрос через wget внешних ссылок, такое не умеют. В этом случае можно добавить команду run-one в начало команды задачи, например, запуск периодического крона по хттп через wget может выглядеть так:

* * * * * run-one wget -O /dev/null http://домен/wp-cron.php
# или запуск пхп скрипта каждые 5 минут (PHP 5.4)
*/5 * * * * run-one /usr/bin/php54 /home/логин/www/домен/script.ph

Обратите внимание, лучше всегда запускать через утилиту run-one для избегания проблем с блокировками в базе и других местах.

Тэги: cron, dev