トップ / プロダクト管理 / Cron スケジュール

Cron スケジュール

このページでできること

  • 選択中プロダクトについて、cron 自動実行を有効にするか、毎月どの日に動かすかを設定できます。
  • cron からのクロール間隔(秒)をプロダクト個別に指定できます。
  • cron 1 回あたりの URL 上限(システム全体)を設定し、1 万 URL 規模のサイトでも 1 回の cron を有限時間で終わらせられるよう調整できます。
  • サーバの cron に登録すべきコマンドの「ひな型」をその場で確認できます。

URL: pages/schedule.php?product_id=<id>。サイドバーの「プロダクト管理 → Cron スケジュール」から開きます。システム管理者専用のページです。フォームは action=schedule(プロダクト個別設定)と action=global(システム全体の上限)の 2 系統で動きます。

① 毎月の実行日(プロダクト個別)

クヌギスキーマの cron は 「1 時間に 1 回」 叩く前提です(例: 0 * * * *)。cron/run_cron.php は起動するたびに「今日は実行日か?」を判定し、該当プロダクトの当日まだクロールしていない URL を、上限件数まで処理します。

選択補助ボタン

クロール間隔(秒)

自動実行の有効/無効

「このプロダクトの自動実行を有効にする」チェックボックスを OFF にすると、選択した実行日であっても cron からはスキップされます。一時停止用途で使ってください(チェックを外しても、選んだ日付の設定自体は残ります)。

② cron 1 回あたりの URL 上限(システム全体)

カード 2 つ目では、cron 1 回の実行で処理する URL の最大数を制限できます。app_settings.cron_max_urls_per_run として保存される、全プロダクト共通のグローバル設定です。

上限と頻度の組み合わせ例
  • URL 1,000 件・1 日で消化したい → 上限 100 + 毎時 cron(10 時間で完了)。
  • URL 10,000 件・1 日で消化したい → 上限 500 + 毎時 cron(20 時間で完了)。
  • URL 50,000 件・実行日を分散したい → 実行日を 1, 11, 21 の 3 日に分け、各日に 1〜2 万件ずつ消化(例: 上限 1,000 + 毎時 cron)。
  • 1 日で完全に取り切りたい → 上限 0(無制限)+ 毎時 cron 1 回だけ動けば OK。ただし1 回の cron が長時間化するので、サーバ側の制限に注意。

cron 設定の例(画面上のひな型)

下半分の「Cron 設定の例」セクションには、現環境に応じた絶対パスを埋め込んだコマンドが表示されます。そのままサーバの cron に登録すれば動きます。

0 * * * * /usr/bin/php /<絶対パス>/cron/run_cron.php >> /<絶対パス>/data/cron.log 2>&1

同じセクション末尾には、現プロダクトの最終起動日cron_schedule.last_triggered_date)も表示されます。cron が想定どおり走っているかを確認できます。新仕様では当日中に複数回 cron を回せるため、last_triggered_date は「日次ロック」用ではなく、最後に cron がクロールを動かした日の記録として参照してください。

複数プロダクトでの運用 cron 1 起動で「当日実行日に該当する全プロダクト」が product_id の若い順に処理されます。「1 回あたりの URL 上限」を全プロダクト合計で消費していくため、上限が小さいプロダクトに到達する前に予算を使い切ることがあります。優先したいプロダクトの product_id を若く保つ(先に作成しておく)か、URL の少ないプロダクトとの実行日を分散させてください。