Налаштування парсера за розкладом (cron) для 1С-Бітрікс
Одноразовий парсинг — це одноразове рішення. Реальна користь починається, коли парсер запускається автоматично за розкладом: оновлює ціни, залишки, описи без участі людини. У 1С-Бітрікс це можна організувати через вбудовані агенти, системний cron або черги — у кожного підходу свої обмеження.
Агенти 1С-Бітрікс vs системний cron
Агенти (b_agent) — вбудований механізм. Працюють при веб-запитах до сайту: агент виконується, коли хтось відкриває сторінку і спрацьовує перевірка CAgent::CheckAgents(). Проблема: при малому трафіку агенти не запускаються вчасно. Надійність агентів підвищується увімкненням режиму «Точний запуск агентів» через cron — тоді агенти запускаються системним завданням, а не браузером відвідувача.
Системний cron — надійніший для парсерів. Прямий виклик PHP-CLI без залежності від трафіку:
*/30 * * * * /usr/bin/php -f /var/www/site/local/scripts/parser_run.php >> /var/log/parser.log 2>&1
Для важких парсерів (10 000+ позицій) системний cron переважніший — немає обмежень PHP-FPM за часом виконання.
Захист від паралельного запуску
Парсер працює 25 хвилин, cron запускає наступний через 30 — два екземпляри не перетнуться. Але якщо парсер завис і працює 35 хвилин? Захист:
$lockFile = '/tmp/parser_' . md5($parserName) . '.lock';
if (file_exists($lockFile) && (time() - filemtime($lockFile)) < 3600) {
exit('Already running');
}
touch($lockFile);
// ... робота парсера ...
unlink($lockFile);
Для розподілених систем (кілька серверів) — блокування через Redis: SET lock:parser NX EX 3600.
Налаштування агентів 1С-Бітрікс для парсингу
Якщо все ж використовуємо агенти — реєструємо через CAgent::AddAgent():
CAgent::AddAgent(
'MyParserAgent::Run();', // функція-агент
'mymodule', // модуль
'N', // не точний
3600, // інтервал у секундах
'', // дата першого запуску
'Y', // активний
date('d.m.Y H:i:s', time() + 3600) // наступний запуск
);
Агент повинен бути зареєстрований в include.php модуля або в init.php.
Логування та моніторинг
Парсер без логів — чорна скринька. Мінімальна схема логування:
file_put_contents($logFile, date('[Y-m-d H:i:s] ') . $message . PHP_EOL, FILE_APPEND);
Для продакшену — структуровані логи з рівнями (info/warning/error) та ротацією через logrotate. Алерт при помилці: якщо в логах за останній запуск є рядки з ERROR — надсилаємо email через \Bitrix\Main\Mail\Event.
Часові рамки робіт
| Етап | Термін |
|---|---|
| Налаштування системного cron або агента 1С-Бітрікс | 1–2 години |
| Реалізація блокування паралельних запусків | 1–2 години |
| Налаштування логування та алертів | 2–4 години |
| Тестування розкладу | 2–4 години |
Разом: 6–12 годин — завдання нескладне, але критичне для надійності всієї системи парсингу.







