Давно не писали про Битрикс, а тут столкнулись с проблемой - регулярно растет кеш сайта до невероятных размеров и приводит к заполнению диска на сервере. При этом сайт перестает нормально работать, и что бы реанимировать его требуется подключение по SSH и ручная чистка каталога с кешем.
И вот, озадачившись автоматизацией работы, решил убрать ручной труд из еженедельного рациона. Идея такая - создать агента, который по расписанию будет выполнять очистку устаревшего кеша.
Начнем с написания скрипта. В папке /bitrix/php_interface/
создаем файл, если его нет, init.php
и добавляем в него нашу функцию:
<? function clean_expire_cache($path = "") { // Проверка и подключение класса CFileCacheCleaner if (!class_exists("CFileCacheCleaner")) { require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/cache_files_cleaner.php"); } $currentTime = time(); $endTime = (defined("BX_CRONTAB") && BX_CRONTAB === true) ? $currentTime + 5 : $currentTime + 1; // Инициализация очистителя кэша $obCacheCleaner = new CFileCacheCleaner("all"); if (!$obCacheCleaner->InitPath($path)) { // Произошла ошибка return "clean_expire_cache();"; } $obCacheCleaner->Start(); // Очистка устаревших файлов кэша while ($file = $obCacheCleaner->GetNextFile()) { if (is_string($file)) { $date_expire = $obCacheCleaner->GetFileExpiration($file); if ($date_expire && $date_expire < $currentTime) { unlink($file); } if (time() >= $endTime) break; } } // Возвращение следующего вызова функции return is_string($file) ? "clean_expire_cache(\"" . $file . "\");" : "clean_expire_cache();"; } ?>
В целом, по комментариям должно быть понятно, что делает скрипт. Но если коротко - фиксируется текущее время, запускается удаление кеша со временем устаревания больше, чем текущее, если выполнение затягивается - процесс останавливается до следующего запуска.
Сохранив изменения в файле, переходим в Администрирование - Настройки - Настройки продукта - Агенты (/bitrix/admin/agent_list.php
) и создаем агента:
В форме создания агента необходимо указать Дату и время первого запуска, подключаемый модуль, название функции из init.php
и время повторного запуска.
Сохраняем и мониторим, как кеш стабилизируется.
Надеюсь было полезно. Будем благодарны за Комментарии и шаринг.