Битрикс-разработчик Вероника Малышева

Агенты на cron

Агенты на cron

Сron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Для редактирования заданий используется утилита crontab.

Первоисточник, но мне этой инструкции оказалось мало, я ее дополнила.

Для начала полностью отключим выполнение агентов на хите. Для этого выполним следующую команду в php консоли.
COption::SetOptionString("main", "agents_use_crontab", "N"); 
echo COption::GetOptionString("main", "agents_use_crontab", "N"); 

COption::SetOptionString("main", "check_agents", "N"); 
echo COption::GetOptionString("main", "check_agents", "Y");
В результате выполнения должно быть "NN".

После этого убираем из файла /bitrix/php_interface/dbconn.php определение следующих констант:
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);
И добавляем
if(!(defined("CHK_EVENT") && CHK_EVENT===true))
   define("BX_CRONTAB_SUPPORT", true);

Создаем файл проверки агентов и рассылки системных сообщений /bitrix/php_interface/cron_events.php
<?php
//тут бывали ошибки - неправильный путь, можно прописать вручную 
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../.."); 

$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS",true);
define('BX_NO_ACCELERATOR_RESET', true);
define('CHK_EVENT', true);
define('BX_WITH_ON_AFTER_EPILOG', true);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

@set_time_limit(0);
@ignore_user_abort(true);

CAgent::CheckAgents();
define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);
CEvent::CheckEvents();

if(CModule::IncludeModule('sender'))
{
    \Bitrix\Sender\MailingManager::checkPeriod(false);
    \Bitrix\Sender\MailingManager::checkSend();
}

require($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/tools/backup.php");
CMain::FinalActions();
?>

И добавляем данный скрипт в cron
*/1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
где

*/1 * * * * - частота запуска, можно воспользоваться Crontab генератором

/usr/bin/php - путь до php, может быть и другой путь у php, уточнить у админа хостинга

/home/bitrix/www/ - это тоже зависит зависит от сервера, чтобы узнать,  распечатать в командной строке $_SERVER;

Можно добавить через админ-панель хостинга  (интерфейс от хостинга зависит)

Можно через ssh, например, с помощью программы putty
указываем hostName или IP адрес, порт 22, ssh, в connection data указываем autologin-username - login, нажимаем Open - вводим пароль

Работа в терминале с crontab

Текущие задания на крон (у текущего пользователя)
crontab -l 
Удалить ВСЕ задания на крон (у текущего пользователя)
crontab -r
Добавить файл с заданиями
crontab имя_файла_расписания
Этот ключ позволяет выполнять действия для конкретного пользователя:
crontab -u username

Добавить задание

Откроем редактор
crontab -e
Если эта команда выполняется в первый раз, вам предложат выбрать редактор для Cron
no crontab for sk - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- простейший
 2. /usr/bin/vim.basic
 3. /usr/bin/vim.tiny
 4. /bin/ed

Choose 1-4 [1]:
Выбрать на усмотрение


У меня был vim (документация по vim)
-перейти в режим редактирования нажать i
-добавить строку, например, */1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
-вернуться в обычный режим <ESC>
-потом ввести :qw и нажать <ENTER>


После этого все агенты и отправка системных событий будут обрабатывается из под cron, раз в 5 минут. Чтобы не увеличивалась очередь отправки почтовых сообщений, советую изменить параметр отвечающий за количество почтовых событий обрабатываемых за раз. Для этого выполняем в php консоли следующую команду
COption::SetOptionString("main", "mail_event_bulk", "20"); 
echo COption::GetOptionString("main", "mail_event_bulk", "5");