Schedule Parser Setup (cron) for 1C-Bitrix: Automation & Reliability

We often see: a Bitrix site with manual price and stock updates — errors, delays, lost sales. A client once came to us with a catalog of 15,000 items: prices were updated once a week manually via Excel. In a month, losses from expired promotions amounted to 8% of turnover. One-time parsing doesn't s

Our competencies:

Frequently Asked Questions

We often see: a Bitrix site with manual price and stock updates — errors, delays, lost sales. A client once came to us with a catalog of 15,000 items: prices were updated once a week manually via Excel. In a month, losses from expired promotions amounted to 8% of turnover. One-time parsing doesn't solve it — you need automatic scheduled execution. Setting up a parser on a schedule (cron) for 1C-Bitrix is a key task for automating data updates. We select the mechanism (Bitrix agents vs system cron), implement parallel run locking, set up logging and alerts. The result: data updates automatically, without human intervention.

How does system cron solve the data update problem?

Agents (b_agent) are Bitrix's built-in mechanism. They only fire when a visitor hits the site and CAgent::CheckAgents() runs. With low traffic, agents run late. The exact launch mode via cron solves the issue but requires system cron configuration. Our experience shows: for parsers that update every 30 minutes, system cron is more reliable.

System cron directly calls PHP-CLI. No dependency on the web server:

*/30 * * * * /usr/bin/php -f /var/www/site/local/scripts/parser_run.php >> /var/log/parser.log 2>&1 

For heavy parsers (10,000+ items), system cron is preferable — no PHP-FPM execution time limits. We guarantee stable execution at any time, even when the site is idle.

Why we recommend system cron for heavy parsers?

On a project with 50,000 products updated every 30 minutes, agents struggled: with 200 visitors per day, execution slipped by 10-15 minutes. Switching to system cron eliminated the delays — updates became precise to the second. Support costs dropped by 30% due to automation.

How to protect the parser from parallel runs?

The parser runs for 25 minutes, cron triggers the next after 30 — two instances won't overlap. But what if the script hangs for 35 minutes? You need protection. We use file-based locking or Redis:

$lockFile = '/tmp/parser_' . md5($parserName) . '.lock'; if (file_exists($lockFile) && (time() - filemtime($lockFile)) < 3600) { exit('Already running'); } touch($lockFile); // ... parser work ... unlink($lockFile); 

For distributed systems (multiple servers) — Redis locking: SET lock:parser NX EX 3600. The cost of a parallel run error: duplicate data and server load. We account for this in every project.

Agents or cron: which to choose? Comparison

Criterion Bitrix agents (b_agent) System cron
Dependency on traffic Yes No
Execution time limit Limited by PHP-FPM (usually 300 s) No limit (PHP-CLI)
Launch precision ± few minutes at low load ± second
Setup complexity Built-in, no server access needed Requires SSH and permissions
Suitable for heavy parsers Conditionally Yes
Logging support Via agent methods Configured separately

Step-by-step cron setup for a parser

  1. Determine the launch command — full path to PHP and script. Check version: which php.
  2. Set up logging — redirect stdout and stderr to a dated log file.
  3. Add the job to crontab — crontab -e, specify schedule and command.
  4. Implement locking — lock file or Redis.
  5. Test — run the command manually, check logs.
  6. Set up alerts — send notifications on errors.

We apply this algorithm in every project — it reduces debugging time by 40%.

Setting up Bitrix agents for parsing

If agents are still used — register via CAgent::AddAgent():

CAgent::AddAgent( 'MyParserAgent::Run();', // agent function 'mymodule', // module 'N', // not exact 3600, // interval in seconds '', // first launch date 'Y', // active date('d.m.Y H:i:s', time() + 3600) // next launch ); 

The agent must be registered in the module's include.php or in init.php. For production, we recommend combining with system cron via 1C-Bitrix documentation. This gives maximum flexibility and precision.

What does structured logging provide?

A parser without logs is a black box. Minimum scheme:

file_put_contents($logFile, date('[Y-m-d H:i:s] ') . $message . PHP_EOL, FILE_APPEND); 

For production — structured logs with levels (info/warning/error) and rotation via logrotate. Alert on error: if the last run's log contains ERROR lines — send an email via \Bitrix\Main\Mail\Event. This cuts response time to failures and halves support costs. According to Bitrix recommendations, such monitoring is mandatory for critical updates.

What's included in the work

  • Audit of the current parser or writing a new one
  • Selection and setup of the launch mechanism (cron/agents)
  • Implementation of parallel run locking
  • Configuration of logging and alerts
  • Schedule testing and error scenario testing
  • Documentation on access and parser operation
  • One-week stability guarantee after launch

Timeline

Stage Duration
Setting up system cron or Bitrix agent 1–2 hours
Implementing parallel run locking 1–2 hours
Setting up logging and alerts 2–4 hours
Schedule testing 2–4 hours

Total: 6–12 hours. Cost is calculated individually — we'll evaluate your project within one business day.

Get a consultation on parser setup — write to us, we'll find the best solution for your budget. Leave a request — we'll tell you how to automate data updates on your project. Contact us to start automation today.