# Как установить агенты на крон

# Настройка агентов на крон в 1С-Битрикс

Эта инструкция поможет вам настроить выполнение агентов через cron для улучшения производительности сайта.

---

## Шаг 1: Отключение выполнения агентов при посещении страниц

1. Перейдите в административную панель сайта.
2. Откройте раздел **Настройки** → **Инструменты** → **Командная PHP-строка**.
3. Вставьте и выполните следующий код:
> Если прочие команды есть, то их надо стереть
   ```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`, что подтверждает корректное выполнение.

---

## Шаг 2: Настройка файла конфигурации
> Правки желательно вносить не через админку сайта, а через ftp/ssh или через файловый менеджер хостинг
1. Откройте файл `/bitrix/php_interface/dbconn.php`.
2. Удалите следующие строки, если они присутствуют:

   ```php
   define("BX_CRONTAB_SUPPORT", true);
   define("BX_CRONTAB", true);
   ```

3. Добавьте следующую строку:

   ```php
   if (!(defined("CHK_EVENT") && CHK_EVENT === true))
       define("BX_CRONTAB_SUPPORT", true);
   ```

---

## Шаг 3: Создание скрипта для выполнения агентов
> Правки желательно вносить не через админку сайта, а через ftp/ssh или через файловый менеджер хостинг
1. Создайте файл `/bitrix/php_interface/cron_events.php` со следующим содержимым:

   ```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);

   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();
   ?>
   ```

---

## Шаг 4: Настройка задания в cron
> Рекомендуем обратиться в службу технической поддержки для выполнения этого действия, поскольку на виртуальных хостингах обычно предусмотрен специальный интерфейс для таких задач.
  
> **Важно. Нужно, чтобы версия PHP была такая же как и на сайте**
1. Откройте терминал на вашем сервере.
2. Введите команду для редактирования crontab:

   ```bash
   crontab -e
   ```

3. Добавьте следующую строку для выполнения скрипта каждую минуту:

   ```bash
   */1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
   ```

   Замените `/usr/bin/php` на путь к вашему PHP-интерпретатору, если он отличается, и `/home/bitrix/www/` на путь к корневой директории вашего сайта.

4. Сохраните и закройте редактор.

---

## Шаг 5: Оптимизация отправки почтовых сообщений

Чтобы уменьшить очередь отправки почтовых сообщений, выполните в командной PHP-строке административной панели следующий код:

```php
COption::SetOptionString("main", "mail_event_bulk", "20");
echo COption::GetOptionString("main", "mail_event_bulk", "5");
```

После выполнения вы должны увидеть вывод: `20`.

---

## Примечания

- **Права доступа**: Убедитесь, что пользователь, от имени которого выполняется cron-задание, имеет необходимые права доступа к файлам и директориям сайта.
- **Проверка работы**: После настройки рекомендуется проверить корректность выполнения агентов и отправки почтовых сообщений.
- **Логи**: В случае возникновения ошибок проверьте логи сервера и PHP для диагностики проблем.

Следуя этой инструкции, вы настроите выполнение агентов через cron, что позволит разгрузить сервер и обеспечить более стабильную работу сайта.