Для запуска функций в заданное время, в битриксе существует технология Агентов.
По умолчанию, агенты выполняются на хитах, то есть при каждом посещении сайта пользователем, битрикс проверяет, какие агенты пора запускать и выполняет их. У этого способа есть два недостатка — во-первых, при нерегулярном посещении агенты могут запускаться позже чем нужно. Во-вторых — тяжёлые агенты могут затормозить работу сайта. От обоих недостатков можно избавиться, если запускать агенты с помощью cron.
Чтобы выполнять агенты через крон нужно открыть консоль PHP, находящуюся в Настройки>Инструменты>Командная строка 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:
<?
$_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();
}
?>