2026年5月24日
2026年5月24日
WordPressがメンテナンスモードから抜け出せない場合の解決方法
はじめに
WordPressのコアアップデートやプラグイン一括更新を実行した後に「Brief maintenance undergoes scheduled maintenance. Check back in a minute.」というメッセージが表示されたまま何時間も変わらない・管理画面にも通常サイトにもアクセスできない・FTPでファイルを確認すると.maintenanceというファイルが残っている、といった問題はアップデート途中でサーバーがタイムアウトしたり接続が切断されることで.maintenanceファイルが自動削除されずに残ることが原因です。
症状・原因
- サイト全体に「Briefly unavailable for scheduled maintenance. Check back in a minute.」が表示される
- WordPressの管理画面(/wp-admin/)にアクセスしても同じメッセージが表示される
- FTPやSSHでWordPressルートディレクトリを確認すると
.maintenanceファイルが存在する - アップデート自体は完了しているがファイルが残存している
解決手順
ステップ1:メンテナンスモードの状態を確認する
# WP-CLIでメンテナンスモードの状態を確認
wp maintenance-mode status
# .maintenanceファイルの存在と内容を確認
ls -la /var/www/html/.maintenance
cat /var/www/html/.maintenance
# WordPressのルートディレクトリを確認
wp eval "echo ABSPATH;"
# FTPアクセスができない場合はSSHで確認
find /var/www/html -maxdepth 1 -name ".maintenance" -ls
# ファイルの作成時刻を確認(古い場合は削除してOK)
stat /var/www/html/.maintenance
ステップ2:.maintenanceファイルを削除する
# WP-CLIでメンテナンスモードを無効化(推奨)
wp maintenance-mode deactivate
# 状態を確認
wp maintenance-mode status
# WP-CLIが使えない場合はSSHで直接削除
rm /var/www/html/.maintenance
# ファイルが削除されたことを確認
ls -la /var/www/html/.maintenance 2>&1 || echo "File successfully deleted"
// wp-config.phpの同じディレクトリにPHPファイルを一時作成して削除する方法
// fix-maintenance.phpとして保存し、ブラウザでアクセス後に削除
<?php
$maintenance_file = ABSPATH . '.maintenance';
if (file_exists($maintenance_file)) {
unlink($maintenance_file);
echo '.maintenance file deleted successfully.';
} else {
echo '.maintenance file does not exist.';
}
ステップ3:アップデートの完了状態を確認する
# WordPressコアのバージョンを確認
wp core version
# プラグインの更新状態を確認
wp plugin list --update=available --format=table
# テーマの更新状態を確認
wp theme list --update=available --format=table
# データベースのバージョンを確認・必要に応じてアップデート
wp core update-db
# アップデートが中断された場合はコアの整合性を確認
wp core verify-checksums
# プラグインの整合性を確認
wp plugin verify-checksums --all
ステップ4:再発防止のための設定を行う
// wp-config.php: アップデートのタイムアウトを延長
define('FS_TIMEOUT', 300); // 5分
define('FS_CONNECT_TIMEOUT', 30);
// 大規模サイトではバックグラウンドアップデートを無効化
define('AUTOMATIC_UPDATER_DISABLED', true);
define('WP_AUTO_UPDATE_CORE', false);
// functions.php: メンテナンスモードの残存を監視する
add_action('wp_loaded', function(): void {
$maintenance_file = ABSPATH . '.maintenance';
// .maintenanceファイルが10分以上残っている場合は自動削除
if (file_exists($maintenance_file)) {
$file_time = filemtime($maintenance_file);
if (time() - $file_time > 600) {
unlink($maintenance_file);
error_log('[WordPress] Stale .maintenance file removed after 10 minutes.');
}
}
});
// アップデート完了後にメール通知
add_action('_core_updated_successfully', function(string $wp_version): void {
$admin_email = get_option('admin_email');
wp_mail(
$admin_email,
sprintf('WordPress %s への更新が完了しました', $wp_version),
sprintf(
"サイト %s のWordPressコアが %s に更新されました。\n管理画面: %s",
get_bloginfo('name'),
$wp_version,
admin_url()
)
);
});
ステップ5:メンテナンスモードを安全に使用する
// functions.php: カスタムメンテナンスページの設定
add_filter('wp_maintenance_mode_active', '__return_true'); // テスト用
// maintenance.phpをWordPressルートに配置することでカスタムページを表示
// wp-content/maintenance.phpが存在する場合はそちらが優先される
# 手動でメンテナンスモードを制御する
# 有効化
wp maintenance-mode activate
# 無効化
wp maintenance-mode deactivate
# 指定時間後に自動的にメンテナンスモードを終了するスクリプト
at now + 30 minutes <<EOF
wp --path=/var/www/html maintenance-mode deactivate
EOF
# 安全なアップデート手順
# 1. バックアップを取得
wp db export backup-$(date +%Y%m%d).sql
# 2. メンテナンスモードを手動で有効化
wp maintenance-mode activate
# 3. アップデートを実行
wp core update
wp plugin update --all
wp theme update --all
# 4. データベースを更新
wp core update-db
# 5. メンテナンスモードを無効化
wp maintenance-mode deactivate
echo "Update completed successfully"
注意事項
.maintenanceファイルを削除する前に、アップデートが途中で中断されていないか確認してください。アップデートが完全に完了していない状態でサイトを公開すると、プラグインやテーマの不整合が発生する可能性があります- 共有ホスティングでFTPしか使えない場合は、FTPクライアントでWordPressルートディレクトリを開き、
.maintenanceファイルを見つけて削除してください。ファイルが隠しファイルとして表示されない場合は、FTPクライアントの設定で隠しファイルを表示する設定を有効にしてください - 大規模サイトや高トラフィックサイトでは、
AUTOMATIC_UPDATER_DISABLEDをtrueに設定して自動アップデートを無効化し、低トラフィックな時間帯にメンテナンス作業を計画的に行うことを推奨します
まとめ
WordPressメンテナンスモード解除は①wp maintenance-mode statusで状態確認・.maintenanceファイルの存在と作成時刻を確認、②wp maintenance-mode deactivateで無効化・WP-CLIが使えない場合はSSHまたはFTPで.maintenanceファイルを直接削除、③wp core verify-checksumsでコアの整合性確認・wp core update-dbでDBを最新化、④FS_TIMEOUT=300延長・AUTOMATIC_UPDATER_DISABLED=trueで再発防止・wp_loadedフックで10分超過ファイルを自動削除、⑤手動メンテナンス時はwp maintenance-mode activate/deactivateで制御・アップデート前にDBバックアップを取得する手順で解決します。