Views: 15970
Last Modified: 14.08.2014

When working with large as well as not very large projects it is often feasible to move the execution of some especially complex agents to Cron.

  • For a start, we will fully disable the execution of hit agents. To this effect, the following command should be executed on the php console of the administrative menu of the Bitrix product /bitrix/admin/php_command_line.php?lang=en:
    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");
    

    The result of the execution should be NN.

  • Remove from the file /bitrix/php_interface/dbconn.php the definitions of the following constants:
    define("BX_CRONTAB_SUPPORT", true);
    define("BX_CRONTAB", true);
    

    And add:

    if(!(defined("CHK_EVENT") && CHK_EVENT===true))
       define("BX_CRONTAB_SUPPORT", true);
     
  • Next, we create a file for agent testing and system message distribution /bitrix/php_intarface/cron_events.php:
    <?
    $_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();
    ?>
    
  • And add this script to Cron:
     */5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php
    

After that, all the agents and sending of system messages will be processed under cron every 5 minutes.


To avoid building up a queue for sending mail messages, the parameter responsible for a number of mail events processed at a time must be changed. To this effect, we have to run the following command on php console:

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


Courses developed by Bitrix24