Перейти к содержимому
TubePress — бесплатный, самостоятельный & активно поддерживаемый
Справочник разработчика

Скрипты Cron и CLI

Планировщик псевдо-cron и опциональные скрипты командной строки для продвинутых хостингов.

TubePress выполняет повторяющиеся задачи — пересчёт рейтингов, опрос заданий транскодирования, импорт лент, обновление карт сайта и многое другое — не требуя настройки системного crontab. На этой странице описаны псевдо-cron, сердцебиение, поддерживающее его работу, и необязательные командные скрипты для продвинутых серверов.

Псевдо-cron

CronManager — планировщик в стиле WordPress. Задачи регистрируются с именем и интервалом, а CronManager::run() вызывается один раз в конце каждого рендеринга страницы. Каждая задача выполняется только в том случае, если с момента её последнего запуска прошло достаточно времени.

// Register a task (typically from a plugin's boot() method)
CronManager::register('promo_refresh', 600, function () {
    Promo::rebuildCache();   // runs at most every 10 minutes
});

Он спроектирован так, чтобы безопасно работать на любом хостинге:

  • Атомарная блокировка. Условный UPDATE в таблице settings захватывает каждый запуск, поэтому два одновременных запроса никогда не выполнят одну и ту же задачу дважды.
  • Постоянные метки времени. Времена последнего запуска хранятся в settingsautoload = 0), поэтому расписание выдерживает перезапуски и сбои — следующая загрузка страницы просто продолжает с того места, где остановилась.
  • Автоматический откат. Задача, продолжающая вызывать ошибки, повторяется с экспоненциально возрастающим интервалом (максимум один час) до восстановления, а счётчик ошибок сбрасывается при успехе.

Сердцебиение — crontab не нужен

Псевдо-cron срабатывает только при рендеринге страниц, что является проблемой для нового сайта с низким трафиком. TubePress решает эту задачу с помощью самоуправляемого сердцебиения: лёгкого процесса CLI (bin/heartbeat.php), который пингует главную страницу примерно каждые 50 секунд, чтобы планировщик продолжал работу даже при нулевом количестве посетителей.

  • Он защищён PID и автоматически перезапускается при любом веб-запросе, если когда-либо завершится — вам не нужно его запускать или контролировать.
  • Отключите его во время работы, установив heartbeat_enabled в 0.
Именно поэтому TubePress работает на виртуальном хостинге. Благодаря псевдо-cron и сердцебиению плановые задачи просто выполняются — без crontab -e, без супервизора, без дополнительных служб для обслуживания.

Что выполняется в планировщике

Ядро и встроенные плагины регистрируют свои задачи — например, пересчёт CTR, отправку и повтор заданий транскодирования, импорт лент, обработку каталога, задания AI-перевода и обновление карт сайта. По мере включения подсистем они автоматически добавляют свои задачи — ничего настраивать не нужно.

Необязательные CLI-скрипты

Для тяжёлых или разовых операций несколько командных скриптов поставляются в bin/ и могут запускаться вручную или из реального crontab на подходящих серверах. Они включают долго работающие рабочие процессы (для загрузок каталога и массового удаления) и вспомогательные утилиты обслуживания. Запускайте их с помощью системного PHP CLI из корня проекта:

php bin/heartbeat.php        # run the heartbeat in the foreground
php bin/catalogue-worker.php # process catalogue download jobs
Совпадение CLI PHP с веб-PHP. Запускайте CLI-скрипты с той же версией PHP, которую использует ваш сайт (8.2 или новее). Защита версии откажется запускаться на более старых версиях.

Использование реального crontab (продвинутый уровень)

Если вы предпочитаете управлять планировщиком из операционной системы — например, на высоконагруженном сайте, где вам нужно точное и предсказуемое время — вы можете отключить сердцебиение и добавить единственную запись системного cron, которая запрашивает главную страницу (или запускает сердцебиение один раз) с коротким интервалом. Большинству операторов это никогда не нужно; встроенного сердцебиения достаточно.

Следующие шаги

Остались вопросы?

Откройте заявку в панели управления, и наша команда поможет.

Попробовать демо → Скачать TubePress →