Skip to content

保守クリーンアップバッチ ​

目的 ​

WordPress の運用中に増え続ける一時データやログを、WP-Cron で定期的に掃除する。対象は期限切れ transient、期限切れの同時実行ロック行、debug.log。

対象バッチ ​

バッチCron hook実行頻度schedule sync主な処理
期限切れ transient クリーンアップslot_kouryaku_daily_transient_cleanupdailyadmin_initdelete_expired_transients(true) を実行する
期限切れロック行クリーンアップslot_kouryaku_daily_option_row_lock_cleanupdailyadmin_initOptionRowLockInterface::purge_expired() で期限切れのロック行を消す
debug.log ローテーションslot_kouryaku_daily_debug_log_rotationdailyinit priority 20期限切れローテーション済みログを削除し、肥大化した debug.log をローテーションする

いずれも schedule sync を transient で 1 日 1 回までに間引く。

期限切れ transient クリーンアップ ​

TransientCleanupScheduler が daily cron を登録し、実行時に delete_expired_transients(true) を呼び出す。外部オブジェクトキャッシュが有効な場合でも、options テーブル側に残った期限切れ transient を掃除対象にするため、強制フラグ true を渡す。

多重実行対策 ​

項目内容
ロックslot_kouryaku_transient_cleanup_lock option
取得方法add_option() の UNIQUE 制約を使って原子的に取得する
TTL1時間
stale 対応不正値または TTL 超過のロックは削除して再取得を試す

期限切れロック行クリーンアップ ​

OptionRowLockCleanupScheduler が daily cron を登録し、実行時にコンテナから OptionRowLockInterface を取得して purge_expired() を呼び出す。日別データ取込(API-005、ADM-011 / ADM-020)の同時実行ロックは、通常は取込の終了時に消えるが、致命的エラーや実行時間超過で解放されなかった行は同じ日付・ホールを取り込まない限り残る。

項目内容
対象行wp_options の _option_row_lock_%(改名前の _bot_rest_lock_% も含む)
期限切れ値「トークン|期限(Unix 秒)」の期限が現在時刻以前、または期限を読めない行
削除条件読んだ option_value と一致する場合だけ消す(読んだあとに別リクエストが取り直したロックは消さない)
1 回の上限読む行数は 500 行まで(有効なロックも数に含む)
DB エラー何も消さず、error_log に [option-row-lock] purge failed: db error を 1 行書く
多重実行ロックしない。同時に走っても値一致の削除なので、有効なロックを消したり二重に消したりしない

debug.log ローテーション ​

DebugLogRotationScheduler が daily cron を登録し、DebugLogServiceInterface::resolve_log_path() で対象ログを解決してから処理する。

項目内容
ローテーション閾値100MB 超過(DebugLogMaintenanceConstants::MAX_LOG_BYTES)
保持期間ローテーション済み debug.log.N を 14 日保持(mtime 基準)
ロックDebugLogRotationLock
  1. DebugLogRotator::purge_expired_rotated_files() で期限切れのローテーション済みログを削除する。
  2. DebugLogRotationLock::try_acquire() でロックを取る。
  3. DebugLogRotator::rotate_if_oversized() で閾値超過時のみ debug.log をローテーションする。
  4. ローテーションが発生した場合は error_log に結果を記録する。

障害再発防止の運用背景は サイト障害再発防止 を参照する。

参照ファイル ​

  • core_src/Admin/transient_cleanup/TransientCleanupScheduler.php
  • core_src/Admin/option_row_lock_cleanup/OptionRowLockCleanupScheduler.php
  • core_src/Infrastructure/word_press/WordPressOptionRowLock.php
  • core_src/Admin/debug_log/DebugLogRotationScheduler.php
  • core_src/Util/debug_log_rotator/DebugLogRotator.php
  • core_src/Util/debug_log_rotator/DebugLogRotationLock.php
  • core_src/Bootstrap/service_provider/AdminServiceProvider.php