Налаштування парсера за розкладом (cron) для 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування парсера за розкладом (cron) для 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування парсера за розкладом (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 годин — завдання нескладне, але критичне для надійності всієї системи парсингу.