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 を、上限件数まで処理します。
- 1〜31 のチェックボックスから、実行したい日を複数選択できます。
- 例 1:
1と15にチェック → 毎月 1 日と 15 日の各時間ごとに、当日未クロールの URL を上限件数まで自動でクロール。 - 例 2:
1〜7までチェック → 毎月最初の 1 週間は毎時クロール。 - 例 3: すべてチェック → 毎日毎時、ただし当日中に全 URL を消化した後はスキップされ続けるので、結果として「毎日 1 周」になります。
- 2 月など、選択した日が存在しない月(例: 30、31)は、その月だけ単純にスキップされます。
選択補助ボタン
- 「全日選択 / 解除」: 全 31 個のチェックボックスを一括で ON / OFF します(現在の状態を見て反転)。
- 「列 1 〜 列 7」: 7 列レイアウトの「同じ列」を一括 ON / OFF。曜日に近い感覚で「7 日おきだけ動かしたい」といった選び方ができます(厳密には月の開始曜日に依存しないので、1, 8, 15, 22, 29 を選ぶ「7 日おき」感覚です)。
クロール間隔(秒)
- cron 経由のクロールでも、1 URL ごとに
sleep(N)を挟みます。手動実行画面と同じく、対象サーバへの配慮として最低 1 秒以上を推奨します。 - 0〜3600 秒の範囲で設定可能。多数 URL を平日朝に分散させたい場合は、間隔を 10〜30 秒に伸ばすのが安全です。
自動実行の有効/無効
「このプロダクトの自動実行を有効にする」チェックボックスを OFF にすると、選択した実行日であっても cron からはスキップされます。一時停止用途で使ってください(チェックを外しても、選んだ日付の設定自体は残ります)。
② cron 1 回あたりの URL 上限(システム全体)
カード 2 つ目では、cron 1 回の実行で処理する URL の最大数を制限できます。app_settings.cron_max_urls_per_run として保存される、全プロダクト共通のグローバル設定です。
- 1〜100,000 の範囲で指定可能。0 を指定すると無制限になります。
- 既定値は 500。初期設定のままで、1 時間 cron × 500 件 = 1 日最大 12,000 件まで分散処理できます。
- 同じ日に既にクロール済みの URL は自動でスキップされるため、上限を多めに取っても無駄打ちは発生しません。
- フォームの hidden に
action=globalが入っているため、上のスケジュールフォームとは独立で保存できます。
- 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
- 毎時 0 分に起動する設定例です。新仕様は 1 時間に 1 回叩く前提です。
- 標準出力 / 標準エラー出力は
data/cron.logに追記されます(プロダクトごとの詳細結果はcrawl_runs/crawl_results側に残ります)。 - 具体的な手順は cron 自動実行 / インストール方法 → cron による自動クロール を参照。
同じセクション末尾には、現プロダクトの最終起動日(cron_schedule.last_triggered_date)も表示されます。cron が想定どおり走っているかを確認できます。新仕様では当日中に複数回 cron を回せるため、last_triggered_date は「日次ロック」用ではなく、最後に cron がクロールを動かした日の記録として参照してください。
product_id の若い順に処理されます。「1 回あたりの URL 上限」を全プロダクト合計で消費していくため、上限が小さいプロダクトに到達する前に予算を使い切ることがあります。優先したいプロダクトの product_id を若く保つ(先に作成しておく)か、URL の少ないプロダクトとの実行日を分散させてください。