Очень часто возникает какая-нибудь техническая задача, которую необходимо выполнять с определенной периодичностью, например:
- обновление цен и остатков по прайсам поставщиков;
- импорт товаров из внешних источников;
- пересчет цен по формулам;
- добавление "бейджей" подходящим товарам;
- и тд.
Для решения задачи мы пишем скрипт, но если задача периодическая, на помощь к нам приходит cron.
И самая частая проблема - установить задачу, чтобы она работала и выполнялась по нужному расписанию. На виртуальном хостинге это делается через панель управления, а как быть, если вы используете BitrixVM?
Добавление задачи в cron
Да, вы можете редактировать файл cron из консоли вручную через vim или nano, но я покажу один более удобный способ (я искренне недолюбливаю консольные текстовые редакторы :)).Для начала найдите в папке сайта /bitrix/crontab/ файл crontab.cfg. Если он отсутствует, добавьте его.
Все необходимые задачи просто добавляйте в этот файл.
Дальше, после добавления задач, заходите в терминал и пишете команду:
crontab /home/bitrix/ext_www/rushstudio.by/bitrix/crontab/crontab.cfg -u bitrix
В ней вы указываете путь к вашему файлу /crontab.cfg на сервере, а -u bitrix мы дописываем, если мы зашли в терминал под пользователем root, а не bitrix. В таком случае у нас добавятся задачи, выполняемые от пользователя bitrix, что нам и требуется.
Готово, задачи добавлены!
Для просмотра списка установленных на cron задач можно выполнить в терминале команду:
crontab -l -u bitrix
Примечание
- Этот способ подходит, если у вас одно ядро Битрикс на сервере, т.к. если у вас две копии ядра, у каждого будет свой файл crontab.cfg и они будут затирать задачи друг друга.
- Также надо иметь ввиду что задачи надо добавлять от пользователя bitrix.
- В cron не должно быть задач, добавленных вручную ранее. Иначе они будут затерты. Перенесите их в /bitrix/crontab/crontab.cfg
- В cron недоступен $_SERVER["DOCUMENT_ROOT"], поэтому учтите это. Если он используется в вашем скрипте, можно его указать явно:
define("NO_AGENT_CHECK", true);
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
$_SERVER["DOCUMENT_ROOT"] = "/home/bitrix/ext_www/rushstudio.by";
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");