先日、ローカル環境でWordPressコアを最新版に更新しようとしたら、思いがけずハマってしまいました。エラーメッセージそのままでも検索に引っかかりそうな内容なので、原因と対処法を残しておきます。
最初に出た症状:サイトが丸ごとメンテナンス画面に
コア更新を実行した直後、サイトにアクセスすると「現在メンテナンス中です」という画面がずっと表示されたままになりました。普通、コア更新のメンテナンス表示は一瞬で終わるはずなので、明らかに様子がおかしいと感じました。
調べてみると、WordPressはコア更新中、サーバーのドキュメントルート直下に.maintenanceという一時ファイルを作成し、更新が終わったタイミングで自動的に削除する仕組みになっています。今回はこのファイルが削除されないまま残ってしまっていて、それが原因でサイト全体がメンテナンス画面として扱われ続けていました。中身を見ると$upgrading = (タイムスタンプ);とだけ書かれたシンプルなPHPファイルで、これを手動で削除したところ、サイトはすぐに通常表示へ戻りました。
次に出た症状:「別の更新が現在進行中です」
サイト自体は復旧したので、気を取り直してもう一度コア更新を実行しようとしたところ、今度は「別の更新が現在進行中です」という別のエラーで弾かれてしまいました。実際には更新プロセスなど動いていないはずなのに、です。
これはWordPressが更新の多重実行を防ぐために、core_updater.lockとauto_updater.lockというオプションをwp_optionsテーブルに一時的に保存する仕組みが原因でした。1つ目のメンテナンス画面のトラブルで更新プロセスが正常終了しなかったため、このロック用オプションだけが消えずに残ってしまっていたようです。
検索してもなかなか答えにたどり着けなかった
実はこのトラブルに当たったとき、最初は普通に「WordPress 別の更新が現在進行中です」で検索していました。ただ出てくる記事の多くは「少し時間を置いてから再度お試しください」で終わっているものが多く、自分のケースのように何十分待っても直らないパターンの解決策にはなかなかたどり着けませんでした。今回のように更新処理自体が中断された名残りでロックが残ってしまっているケースだと、時間経過では解決しないんですよね。結局、WordPressコアのソースコードを直接読んで、更新処理がどのタイミングでどのオプションを読み書きしているかを追いかけることになりました。
対処方法
WP-CLIが使える環境だったので、次の手順で復旧させました。
- ドキュメントルート直下の
.maintenanceファイルを削除する wp option delete core_updater.lockを実行するwp option delete auto_updater.lockを実行する- あらためて
wp core updateを実行する
この手順で無事にコア更新が完了しました。管理画面のUIだけで操作していたら、ロック用オプションの存在に気づくのはかなり難しかったと思います。DBの中身まで見に行けるWP-CLIのありがたみを感じた場面でした。
再発したときのために手順をメモ化しておいた
今回原因を突き止めるまでに結構な時間がかかってしまったので、次に同じ症状が出たときにすぐ動けるよう、社内的な備忘録(と言っても自分しかいないんですが)として手順を残すようにしました。個人開発だと、こういう「一度解決したはずのトラブル」を数ヶ月後にまた一から調べ直す羽目になりがちなので、地味ですが効果は大きいなと感じています。
本番環境ではなぜか発生しなかった
念のため本番のXserver環境でも同じ手順でコア更新を試したんですが、こちらは特に問題なく一発で更新が完了しました。同じWordPress・同じテーマ構成なのに再現しなかったので、おそらくローカルのMAMP環境特有の要因(更新処理の途中でPHPのタイムアウトや何らかの中断が発生した、など)が絡んでいたのではないかと推測しています。原因を完全に特定できたわけではないんですが、少なくとも対処法さえ分かっていれば慌てずに済むな、と感じました。
WP-CLIが使えない場合はどうするか
今回はWP-CLIで一発でしたが、レンタルサーバーによってはSSHもWP-CLIも使えない環境もあると思います。その場合でも、FTP/SFTPでドキュメントルート直下の.maintenanceファイルを削除するところまでは同じようにできます。ロックオプションの削除については、phpMyAdminなどのDB管理ツールからwp_optionsテーブルを開き、option_nameがcore_updater.lockまたはauto_updater.lockの行を直接削除すれば、同じ効果が得られるはずです。管理画面のUIだけで完結しないぶん少し身構える作業ではありますが、手順さえ分かっていれば怖くはないかなと思います。
まとめ
「メンテナンス画面から戻ってこない」「別の更新が進行中と言われる」のどちらも、実際には更新プロセスが正常終了しなかった名残りが原因でした。同じ症状に遭遇した人の助けになればと思い、原因と対処法をまとめておきます。管理画面から直せない類のエラーに当たったときは、DBのオプションテーブルまで疑ってみる価値がありそうです。
この記事が参考になったら、応援クリックをお願いします


