Next Generation CMS - Управляйте контентом без границ!
Создавай
Развивай
Управляй
Актуальная v.1.0.0
Настройка CRON для NGCMS (на примере плагина nsched)
Главная страница / 📚 Разбор кода NGCMS / Разработка / Настройка CRON для NGCMS (на примере плагина nsched)

Настройка CRON для NGCMS (на примере плагина nsched)

Плагин nsched (и ряд других задач движка — db_backup, news_views, load_truncate) выполняется через встроенный менеджер cronManager. Чтобы расписание реально соблюдалось, а не срабатывало «когда получится», нужно понимать, как устроен внутренний cron NGCMS, и настроить его правильный запуск на вашем окружении.

1. Как устроен «псевдо-cron» в движке

  • Список задач и расписание хранится в файле engine/conf/cron.php (заполняется через админку: Система → CRON, либо автоматически при установке плагина через cronManager::registerTask()).
  • Сам менеджер (cronManage, класс в engine/includes/inc/extras.inc.php) не запускается по таймеру сам по себе. Он вызывается вручную в двух местах:
    • index.php (в самом конце, после отдачи страницы) — вызывает $cron->run()только когда кто-то открывает фронтенд сайта;
    • syscron.php (отдельная точка входа в корне сайта) — вызывает $cron->run(true) и предназначена именно для внешнего вызова по расписанию (настоящим cron/планировщиком).
  • Внутри run() есть защита от повторных/параллельных запусков: он создаёт flag-файлы во
    engine/cache/main/<subsite>/core/cron_<timestamp>. Задачи фактически выполняются не чаще одного раза в 5 минут ($period = 300), даже если реальных вызовов было больше.

Из этого следуют два важных вывода
  1. Если полагаться только на index.php, задачи будут выполняться только при живом трафике на сайт. На сайте без посетителей (ночью, на служебных/тестовых окружениях, при малой посещаемости) расписание может не соблюдаться часами.
  2. Чтобы cron работал предсказуемо, независимо от посетителей, нужно настроить внешний вызов syscron.php через настоящий планировщик задач операционной системы или панели хостинга.

2. Локальная разработка (Windows / OSPanel, Denwer и т.п.)

Используется Планировщик заданий Windows (Task Scheduler).

Через GUI

  1. Win + Rtaskschd.msc.
  2. «Создать задачу» → указать имя, например NGCMS-cron.
  3. Триггер: «Повторять задачу каждые» → 5 минут,«в течение» → «Неопределенно».
  4. Действие → «Запуск программы»:
    • Программа: C:\OSPanel\modules\PHP-8.2\PHP\php.exe
    • Аргументы: C:\OSPanel\home\it\syscron.php
    • Рабочая папка: C:\OSPanel\home\it

Через PowerShell / schtasks (эквивалент)

Код:
$action = New-ScheduledTaskAction -Execute 'C:\OSPanel\modules\PHP-8.2\PHP\php.exe' `
-Argument 'syscron.php' -WorkingDirectory 'C:\OSPanel\home\it' $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) `
-RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration ([TimeSpan]::MaxValue) Register-ScheduledTask -TaskName 'NGCMS-cron' -Action $action -Trigger $trigger `
-Description 'Запуск syscron.php NGCMS каждые 5 минут'

Проверить/удалить задачу:

Код:
Get-ScheduledTask -TaskName 'NGCMS-cron'
Unregister-ScheduledTask -TaskName 'NGCMS-cron' -Confirm:$false

3. Сервер по SSH (VPS/VDS с root-доступом)

Настоящий cron через crontab. Путь к PHP CLI и к сайту нужно подставить свои (уточнить командой which php).

Код:
crontab -e

Добавить строку (запуск каждые 5 минут):

Код:
*/5 * * * * /usr/bin/php /var/www/it/syscron.php >/dev/null 2>&1

Если на сервере несколько версий PHP (важно использовать ту же версию, что и веб-сервер, например 8.2):

Код:
*/5 * * * * /usr/bin/php8.2 /var/www/it/syscron.php >/dev/null 2>&1

Если CLI PHP недоступен (редко, но бывает в контейнерах/ограниченных окружениях) — можно дёргать по HTTP через curl/wget:

Код:
*/5 * * * * curl -s -o /dev/null https://example.com/syscron.php
CLI-вызов предпочтительнее: он не создаёт лишнего HTTP-соединения, не зависит от .htaccess/веб-сервера и не виден снаружи.

Проверить, что задача добавлена:

Код:
crontab -l

Логи выполнения cron (Debian/Ubuntu):

Код:
grep CRON /var/log/syslog

4. Хостинг с панелью управления (без SSH)

Практически везде есть раздел «Cron-задания» / «Планировщик задач» / «Cron Jobs».
Типовые расположения:

ПанельГде искать
cPanelAdvanced → Cron Jobs
ISPmanagerИнструменты → Планировщик задач (Cron)
PleskСайты / Инструменты → Расписание задач (Scheduled Tasks)
DirectAdminAdvanced Features → Cron Jobs
VestaCP/HestiaCPCRON JOBS (отдельный пункт в левом меню)
timeweb / beget / reg.ru / sprinthost и др.обычно «Cron», «Планировщик» в разделе сайта/хостинга

Общий алгоритм в панели:

  1. Найти раздел Cron Jobs / Планировщик задач.
  2. Указать периодичность: */5 * * * * (каждые 5 минут) — либо выбрать в конструкторе «каждые 5 минут».
  3. Указать команду. В панелях с поддержкой PHP CLI обычно нужно указать именно её, например:
    Код:
    /usr/bin/php /home/u12345/public_html/syscron.php
    (путь и версию PHP уточняйте у хостинга — часто есть выбор версии PHP прямо в форме добавления Cron-задания).
  4. Если хостинг поддерживает только вызов по URL (некоторые бюджетные тарифы) — указать полный адрес:
    Код:
      https://example.com/syscron.php

5. Как проверить, что cron реально работает

  1. Вручную запустить и посмотреть, нет ли фатальных ошибок:
    Код:
     php syscron.php
    (на Windows —C:\OSPanel\modules\PHP-8.2\PHP\php.exe syscron.php из папки сайта).
  2. Проверить лог плагина nsched: engine/cache/logs/nsched.log — там должны появляться строки вида CRON execution started at ... и CRON finished: elapsed=....
  3. Если после ручного запуска в логе фатальная ошибка — сначала исправьте её, а потом настраивайте расписание (иначе cron будет молча падать каждый раз).
  4. Если запуск не даёт эффекта и лог не обновляется — проверьте flag-файлы в engine/cache/main/<...>/core/cron_*. Файл нулевого размера означает «зависший»/незавершённый запуск — он блокирует повторные запуски на 120 секунд. Удалите такой файл вручную, если уверены, что процесс больше не выполняется.

6. Частые ошибки

Cron настроен, но новости не публикуются/не снимаются.

Проверьте, что настроена именно ссылка на syscron.php, а не на index.php и не на страницу админки — они не выполняют реальную работу cron надёжно (для index.php работа зависит от посещаемости, админка вообще не вызывает$cron->run()).
Задача в панели хостинга есть, а логов нет.

Скорее всего неверный путь к PHP или к файлу syscron.php, либо сайт лежит не в public_html, а в подпапке — уточните полный путь через SSH/файловый менеджер хостинга (pwd в корне сайта).
Разное поведение локально и на сервере.

Убедитесь, что версия PHP CLI, вызываемая cron'ом, совпадает (или хотя бы совместима) с версией PHP веб-сервера — расхождения в версии иногда дают разные ошибки (как в PHP 8, где несовпадение числа аргументов у встроенных функций — фатальная ArgumentCountError, а не предупреждение).


Добавить комментарий

  • Сколько букв в слове "кот"?

Настройка CRON для NGCMS (на п...

04 Sep 2026 , admin
Плагин nsched (и ряд других задач движка &mda...

PHP 8.5: что нового — полный о...

01 Sep 2026 , admin
PHP 8.5 — очередное крупное обновлен...

Изменение фона выделенного тек...

21 Aug 2026 , admin
Многим не нравится выделение текста на страни...

Шаблоны

Шаблон админ-панели Old2

Шаблон админ-панели Old2

Шаблон админ-панели Old2, одна из моих старых попыток адаптации старой админки на новый лад, вот подумал чего добру пропадать , адаптировал до последней версии
Шаблон админ-панели Oniks

Шаблон админ-панели Oniks

Один из старых скинов админки от Русика , адаптирован под последнею версию движка .
Шаблон Android Dev

Шаблон Android Dev

Данный шаблон выполнен с преобладанием зелёного и белого цветов. Это подсознательно подчёркивает тему мобильных устройств на платформе андроид. Сам по себе, шаблон Android Dev очень лёгкий и быстрый п...
Шаблон админ-панели Velonic

Шаблон админ-панели Velonic

Шаблон полностью адаптивный, настраивается на свой вкус и цвет.
Шаблон Travel Hour

Шаблон Travel Hour

Travel Hour - красивое и замечательное решение для создания туристического сайта, сайта о курортах и турах, сайта об отдыхе. Шаблон полностью адаптивный, прекрасно отображается на планшетах и смартфон...
Русский English Deutsch Français Español Українська Қазақша
up