こんにちは!WordPressを運用していると、バックグラウンドで定期処理(記事の予約投稿やプラグインの自動更新など)を行ってくれる「wp-cron(ウェブクロン)」という仕組みにお世話になりますよね。
「なんとなくcron的な動きをしているのは知っているけれど、詳しい仕組みまでは分かっていない……」という方も多いのではないでしょうか。
先日、WordPressサイトのサーバー引っ越し(移転)作業を行った際、ふと疑問に思いました。 「元のサーバーにWordPressのファイルやデータベースを残したままだと、旧サーバー側のwp-cronって裏で動き続けちゃうの?それとも勝手に止まるの?」
気になったので、実際のサーバーログを追って検証してみました!
1. wp-cronの稼働状況をログから調査する
wp-cronが動いているかどうかは、Webサーバー(Apache)のアクセスログを見れば一発で分かります。wp-cronは、外部からのアクセスなどをトリガーに、自分自身に対して wp-cron.php を呼び出す(HTTPリクエストを送る)仕組みだからです。
さっそく、旧サーバーのアクセスログ(/var/log/httpd/access_log)を、移転したサイトのキーワード(例:kashi)と wp-cron で検索(grep)してみました。
cat /var/log/httpd/access_log* | grep wp-cron | grep kashi | tail
出力されたログの結果
ログを確認すると、以下のようなレコードが残っていました。
xxx.xxx.xxx.xxx - - [15/Nov/2024:15:21:07 +0900] "POST /kashi/wp-cron.php?doing_wp_cron=XXXXXXXX.XXXXXXXXXXXXXXXXXX HTTP/1.1" 200 - "-" "WordPress/6.7; https://shimauta.net/kashi"
ログを追っていくと、2024年11月15日のこのアクセスを最後に、wp-cronの実行ログがピタリと途絶えていました。
2. なぜ旧サーバーのwp-cronは「勝手に止まった」のか?
実はこの最後のログが記録された日時は、ちょうど「DNS(ネームサーバー)を切り替えて、ドメインの向き先を新しいサーバーへ変更したタイミング」でした。
旧サーバー側では、ファイルの削除もデータベースの停止もしておらず、環境はそのまま残っていたのになぜ止まったのでしょうか?
その理由は、wp-cronの「仕組み」にあります。
wp-cronが動く仕組み
-
ユーザー(訪問者)がブログにアクセスする。
-
WordPressが「あ、アクセスが来たな」と検知する。
-
バックグラウンドで、自身のサイトのURL(例:
https://shimauta.net/kashi/wp-cron.php)に対して非同期の「POSTリクエスト」を送信し、定期処理を実行する。
つまり、DNSを切り替えたことによって、一般のユーザーは全員「新サーバー」へアクセスするようになります。旧サーバーには誰もアクセスしなくなる(=リクエストの引き金が引かれなくなる)ため、旧サーバー側のwp-cronは何も弄らなくても自然に停止する、というのが真相でした。
3. 【Tips】wp-cronを明示的に、確実に停止させる方法
今回の検証で「DNSを切り替えれば旧サーバー側は自然に止まる」ことが分かりましたが、開発環境やステージング環境などで「アクセスはあるけれど、wp-cronだけは絶対に動かしたくない!」というケースもありますよね。
wp-cronをシステム的に明示的に停止させたい場合は、WordPressの設定ファイルである wp-config.php に以下のコードを1行追加すればOKです。
/** wp-cronを無効化する */
define('DISABLE_WP_CRON', 'true');
この記述を追加しておけば、仮にサイトへのアクセスがあったとしても、wp-cron.php が自動でキックされるのを確実に防ぐことができます。
まとめ
-
検証結果: サーバー移転後、旧サーバー側のwp-cronは自動的に停止する(DNS切り替えによってアクセスが来なくなるため)。
-
確実に行うなら: 旧環境からの予期せぬ外部通信や二重動作を防ぐためにも、移転完了後は旧サーバーの
wp-config.phpでDISABLE_WP_CRONをtrueにしておくか、ディレクトリごと削除・パーミッション変更をしておくのが安全です。
仕組みが分かると、「なるほど、だからあのタイミングで止まったのか!」とスッキリしますね。サーバー引っ越しの際の参考になれば幸いです!
