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
});あらゆるホスト環境で安全に動作するよう設計されています:
- アトミックロック。
settingsテーブルへの条件付きUPDATEによって各実行を排他的に確保するため、2 つの同時リクエストが同じタスクを二重に実行することはありません。 - 永続的なタイムスタンプ。 最終実行時刻は
settings(autoload = 0)に保存されるため、再起動やクラッシュが発生してもスケジュールは維持され、次のページ読み込み時にそのまま再開されます。 - 自動バックオフ。 エラーを繰り返すタスクは、回復するまで指数関数的に増加する間隔(最大 1 時間)でリトライされ、成功すると失敗カウンターがリセットされます。
ハートビート — crontab 不要
疑似 cron はページがレンダリングされている時にのみ動作するため、新規または低トラフィックのサイトでは問題になります。TubePress はこれを自己管理型ハートビートで解決しています。軽量な CLI プロセス(bin/heartbeat.php)がホームページに約 50 秒ごとにアクセスし、訪問者がゼロでもスケジューラが動作し続けるようにします。
- PID ガードが適用されており、停止した場合はウェブリクエストによって自動的に再起動されます。手動で起動したり監視したりする必要はありません。
- 実行時に無効化するには、
heartbeat_enabledを0に設定してください。
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実際の crontab を使用する(上級者向け)
オペレーティングシステムからスケジューラを制御したい場合(たとえば、厳密で予測可能なタイミングが求められる高トラフィックサイトなど)、ハートビートを無効にして、短い間隔でホームページにアクセスする(またはハートビートを一度実行する)単一のシステム cron エントリを追加できます。ほとんどのオペレーターにはこれは不要です。組み込みのハートビートで十分です。