コンテンツへスキップ
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
});

あらゆるホスト環境で安全に動作するよう設計されています:

  • アトミックロック。 settings テーブルへの条件付き UPDATE によって各実行を排他的に確保するため、2 つの同時リクエストが同じタスクを二重に実行することはありません。
  • 永続的なタイムスタンプ。 最終実行時刻は settingsautoload = 0)に保存されるため、再起動やクラッシュが発生してもスケジュールは維持され、次のページ読み込み時にそのまま再開されます。
  • 自動バックオフ。 エラーを繰り返すタスクは、回復するまで指数関数的に増加する間隔(最大 1 時間)でリトライされ、成功すると失敗カウンターがリセットされます。

ハートビート — crontab 不要

疑似 cron はページがレンダリングされている時にのみ動作するため、新規または低トラフィックのサイトでは問題になります。TubePress はこれを自己管理型ハートビートで解決しています。軽量な CLI プロセス(bin/heartbeat.php)がホームページに約 50 秒ごとにアクセスし、訪問者がゼロでもスケジューラが動作し続けるようにします。

  • PID ガードが適用されており、停止した場合はウェブリクエストによって自動的に再起動されます。手動で起動したり監視したりする必要はありません。
  • 実行時に無効化するには、heartbeat_enabled0 に設定してください。
これが 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 のバージョンを一致させてください。 サイトが使用しているものと同じ PHP バージョン(8.2 以降)で CLI スクリプトを実行してください。バージョンガードがそれより古いバージョンでの起動を拒否します。

実際の crontab を使用する(上級者向け)

オペレーティングシステムからスケジューラを制御したい場合(たとえば、厳密で予測可能なタイミングが求められる高トラフィックサイトなど)、ハートビートを無効にして、短い間隔でホームページにアクセスする(またはハートビートを一度実行する)単一のシステム cron エントリを追加できます。ほとんどのオペレーターにはこれは不要です。組み込みのハートビートで十分です。

次のステップ

まだお困りですか?

ダッシュボードからチケットを送信してください。サポートチームがお手伝いします。

ライブデモを試す → TubePress をダウンロード →