Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【検証】サーバー移転後、旧サーバーの「wp-cron」は動き続ける?それとも止まる?

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

こんにちは!WordPressを運用していると、バックグラウンドで定期処理(記事の予約投稿やプラグインの自動更新など)を行ってくれる「wp-cron(ウェブクロン)」という仕組みにお世話になりますよね。

「なんとなくcron的な動きをしているのは知っているけれど、詳しい仕組みまでは分かっていない……」という方も多いのではないでしょうか。

先日、WordPressサイトのサーバー引っ越し(移転)作業を行った際、ふと疑問に思いました。 「元のサーバーにWordPressのファイルやデータベースを残したままだと、旧サーバー側のwp-cronって裏で動き続けちゃうの?それとも勝手に止まるの?」

気になったので、実際のサーバーログを追って検証してみました!

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

1. wp-cronの稼働状況をログから調査する

wp-cronが動いているかどうかは、Webサーバー(Apache)のアクセスログを見れば一発で分かります。wp-cronは、外部からのアクセスなどをトリガーに、自分自身に対して wp-cron.php を呼び出す(HTTPリクエストを送る)仕組みだからです。

さっそく、旧サーバーのアクセスログ(/var/log/httpd/access_log)を、移転したサイトのキーワード(例:kashi)と wp-cron で検索(grep)してみました。

Bash

cat /var/log/httpd/access_log* | grep wp-cron | grep kashi | tail

出力されたログの結果

ログを確認すると、以下のようなレコードが残っていました。

Plaintext

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が動く仕組み

  1. ユーザー(訪問者)がブログにアクセスする。

  2. WordPressが「あ、アクセスが来たな」と検知する。

  3. バックグラウンドで、自身のサイトの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です。

PHP

/** wp-cronを無効化する */
define('DISABLE_WP_CRON', 'true');

この記述を追加しておけば、仮にサイトへのアクセスがあったとしても、wp-cron.php が自動でキックされるのを確実に防ぐことができます。

まとめ

  • 検証結果: サーバー移転後、旧サーバー側のwp-cronは自動的に停止する(DNS切り替えによってアクセスが来なくなるため)。

  • 確実に行うなら: 旧環境からの予期せぬ外部通信や二重動作を防ぐためにも、移転完了後は旧サーバーの wp-config.phpDISABLE_WP_CRONtrue にしておくか、ディレクトリごと削除・パーミッション変更をしておくのが安全です。

仕組みが分かると、「なるほど、だからあのタイミングで止まったのか!」とスッキリしますね。サーバー引っ越しの際の参考になれば幸いです!

タイトルとURLをコピーしました