Ejecutar agentes de CMS Bitrix mediante cron

Guía paso a paso para configurar los agentes de 1C-Bitrix para que se ejecuten mediante cron.

Los agentes en 1C-Bitrix son un mecanismo integrado para automatizar tareas recurrentes: envío de correos, indexación de búsqueda, limpieza de caché, procesamiento de eventos y mucho más.

Por defecto, los agentes se ejecutan en cada hit (cada vez que un usuario visita el sitio). Esto funciona bien en proyectos pequeños, pero con carga elevada o muchos agentes ralentiza el sitio considerablemente y aumenta la carga del servidor.

Cambiar los agentes a cron es el enfoque recomendado para todos los proyectos en alojamiento web, VPS y servidores dedicados. Esto descarga el sitio y garantiza una ejecución estable de las tareas según el calendario definido.

Paso 1: desactivar los agentes en hit

Conéctate al servidor mediante SSH y ejecuta estos comandos en la consola PHP (o edita /bitrix/.settings.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");

Salida esperada: NN

Paso 2: editar dbconn.php

Abre el archivo /bitrix/php_interface/dbconn.php:

nano /bitrix/php_interface/dbconn.php

Elimina (o comenta) estas líneas:

define("BX_CRONTAB_SUPPORT", true);
define("BX_CRONTAB", true);

Añade en su lugar:

if (!(defined("CHK_EVENT") && CHK_EVENT === true)) {
    define("BX_CRONTAB_SUPPORT", true);
}

Guarda el archivo (Ctrl+O → Enter → Ctrl+X).

Paso 3: crear el archivo del script cron

Crea el archivo /bitrix/php_interface/cron_events.php:

nano /bitrix/php_interface/cron_events.php

Inserta el siguiente código:

$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__) . "/../..");
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
define("CHK_EVENT", 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("subscribe")) {
    $cPosting = new CPosting;
    $cPosting->AutoSend();
}

Guarda el archivo (Ctrl+O → Enter → Ctrl+X).

Nuestros servicios y productos

HostingFunciona en discos NVMe ultrarrápidos. Apto para sitios web de cualquier complejidad.
Pedir
VPSParámetros ajustables y configuración flexible del SO. Administración gratuita incluida.
Pedir
Servidores dedicadosDisponibles diversas configuraciones Supermicro con procesadores Intel y AMD.
Pedir

Paso 4: añadir el job de cron

Abre crontab:

crontab -e

Añade esta línea (ejecución cada 5 minutos):

*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

Reemplaza /home/bitrix/www/ con la ruta real de tu sitio. Guarda y sal.

Paso 5: optimizar el envío de correo (opcional)

Para acelerar el procesamiento de eventos de correo, aumenta el número de mensajes procesados por ejecución (recomendado: 20–50):

COption::SetOptionString("main", "mail_event_bulk", "20");
echo COption::GetOptionString("main", "mail_event_bulk", "5");

Notas útiles

  • Si una nueva ejecución de cron arranca antes de que finalice la anterior — los agentes no se duplican (quedan bloqueados durante la ejecución).
  • Para proyectos con alto volumen de correo, establece mail_event_bulk en un valor mayor (p. ej., 100) y ejecuta cron con más frecuencia (cada 1–2 minutos).
  • Revisa los logs en /bitrix/.logs/ o cron.log para confirmar que cron se está ejecutando y que los agentes funcionan correctamente.

Ayuda

¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!

¿Necesitas ayuda?Nuestros ingenieros te ayudarán gratuitamente con cualquier pregunta en minutosContáctanos