WordPressの自動バックグラウンドアップデートが動かなくなった際に調べたことのメモ。
最終的にはパーミッションが駄目なだけで無駄足だった。
雑に斜め読みしただけなので、認識に誤りがあるかもしれません….
wp-cronによる自動バックグラウンドアップデート処理のキック
アップデート処理 wp_maybe_auto_update()
は wp_version_check()
内で必要に応じてキックされている模様。
WordPress/update.php at 064e62cbeac39a062a46a7d2d7e94b297ad5e8c0 · WordPress/WordPress
# wp-includes/update.php . . . // Trigger background updates if running non-interactively, and we weren't called from the update handler. if ( defined( 'DOING_CRON' ) && DOING_CRON && ! doing_action( 'wp_maybe_auto_update' ) ) { do_action( 'wp_maybe_auto_update' ); } . . .
wp_version_check
は wp-cron
でページアクセス時に実行される (デフォルトだと1日2回)。
ページアクセス ↓ index.php ↓ wp-blog-header.php ↓ wp-load.php ↓ wp-config.php ↓ wp-settings.php // Attach the default filters. require( ABSPATH . WPINC . '/default-filters.php' ); ↓ wp-includes/default-filters.php // WP Cron if ( !defined( 'DOING_CRON' ) ) add_action( 'init', 'wp_cron' ); ↓ wp-cron.php と wp-includes/cron.php で wp-cron のジョブ実行
wp-cron
で wp_version_check
がスケジューリングされているかの確認方法
DBからwp-cronの設定内容を取得する方法
中身はPHPでシリアライズされた文字列なので、このサイト などを用いて適当に整形する。
mysql> select * from wp_options where option_name = 'cron'\G . . . 1495444507 => array( wp_version_check => array( 40cd750bba9870f18aada2478b24840a => array( schedule => twicedaily args => array( ) interval => 43200 ) ) . . .
# date --date "@1495444507" Mon May 22 18:15:07 JST 2017
wp-cli
を設置して確認する方法
# wp --allow-root cron schedule list +------------+---------+----------+ | name | display | interval | +------------+---------+----------+ | hourly | 1時間に1回 | 3600 | | twicedaily | 1日2回 | 43200 | | daily | 1日1回 | 86400 | +------------+---------+----------+
# wp --allow-root cron event list +--------------------------------+---------------------+-------------------+---------------+ | hook | next_run_gmt | next_run_relative | recurrence | +--------------------------------+---------------------+-------------------+---------------+ | wp_scheduled_auto_draft_delete | 2017-05-22 08:31:03 | 6時間 10 minutes | 1日 | | wp_version_check | 2017-05-22 09:15:07 | 6時間 54 minutes | 12時間 | | wp_update_plugins | 2017-05-22 09:15:07 | 6時間 54 minutes | 12時間 | | wp_update_themes | 2017-05-22 09:15:07 | 6時間 54 minutes | 12時間 | | publish_future_post | 2017-05-22 15:05:12 | 12時間 44 minutes | Non-repeating | | yst_ga_aggregate_data | 2017-05-23 00:05:00 | 21時間 44 minutes | 1日 | | wp_scheduled_delete | 2017-05-23 01:22:37 | 23時間 1 minute | 1日 | | publish_future_post | 2017-05-23 15:00:05 | 1日 12時間 | Non-repeating | +--------------------------------+---------------------+-------------------+---------------+
補足: wp-cronのテスト
wp-cli
でテスト実行すると、PHPの生エラーがターミナル上に出力されるのでわかりやすい。。。
# wp --allow-root cron test Success: WP-Cron spawning is working as expected.
※ curl
でwp-cron
を叩いているので、webサーバー上でSITE_URL
へ正常にcurl
出来る必要がある。
(オレオレSSL証明書とか、LAN内でグローバルIPによるアクセスができないインフラなどは要注意…?)
参考
WordPressで予約投稿失敗の原因究明のため、cron.phpを読んでみました | sand a lot Web & Music Create [札幌]