WordPress завис в режиме обслуживания — как выйти и восстановить доступ
Почему WordPress застревает в режиме обслуживания
При каждом обновлении (ядро, плагин, тема) WordPress создаёт в корне сайта файл .maintenance с одной строчкой внутри:
<?php $upgrading = time();
Когда скрипт обновления завершается, WordPress должен сам удалить этот файл. Не удалил — сайт остаётся заблокированным. Вот что мешает.
.maintenance остаётся. На дешёвых тарифах Beget и Timeweb бывает регулярно..maintenance не удалён..maintenance остаётся.Как выйти из режима обслуживания: пошагово
Шаг 1. Удалить .maintenance (базовый способ)
Файл лежит в корне WordPress-сайта. В нем точка в начале имени — он скрытый. В FTP-клиентах (FileZilla, WinSCP) включите показ скрытых файлов. В панели хостинга (файловый менеджер Beget, Timeweb, REG.RU) — тоже включайте опцию «показывать скрытые».
Нашли .maintenance — просто удалите. Сайт вернется к жизни через 1--2 секунды. Если не появился — сделайте жесткий сброс кэша браузера: Ctrl+Shift+R (Windows) или Cmd+Shift+R (Mac).
cd /var/www/ваш-сайт/ && rm -f .maintenanceЕсли удаление не помогло — проверьте, точно ли файл исчез:
ls -la | grep maintenanceШаг 2. Очистить кэш WordPress и хостинга
После удаления .maintenance сайт может по-прежнему показывать страницу обслуживания из-за кэша.
Кэш плагина: если стоит WP Rocket, LiteSpeed Cache или W3 Total Cache — сбросить его. Найти папку wp-content/cache/ и удалить содержимое (саму папку не трогать).
Кэш хостинга: на Beget — кнопка «Очистить кэш» в панели. На Timeweb — раздел «Кэширование», отключить и включить заново. На REG.RU — кэширования на уровне shared-хостинга обычно нет, но проверьте вкладку «Nginx» если стоит.
Кэш браузера: открыть сайт в режиме инкогнито (Ctrl+Shift+N). Если там работает — дело в кэше вашего браузера, а не в сервере.
# Сброс кэша WordPress через WP-CLI (если установлен)
wp cache flush
wp transient delete --all
Шаг 3. Проверить wp-content/upgrade/ на мусор
При зависшем обновлении в wp-content/upgrade/ остаются временные файлы. Они мешают WordPress понять, завершилось обновление или нет.
Зайдите в эту папку — внутри будут подпапки типа plugin-name/ или theme-name/ с распакованными файлами, плюс временные zip-архивы. Удалите всё содержимое wp-content/upgrade/ (саму папку оставьте).
Шаг 4. Если не помогло: восстановить доступ через базу
В редких случаях WordPress записывает флаг обслуживания не только в файл, но и в базу данных — в таблицу wp_options (ключ maintenance_mode). Это баг, он проявляется на старых версиях WP или при кривых миграциях.
Зайдите в phpMyAdmin (или Adminer на Beget, или консоль MySQL на VPS), выберите базу сайта и выполните:
SELECT * FROM wp_options WHERE option_name LIKE '%maintenance%';
Если нашлась запись — удалите:
DELETE FROM wp_options WHERE option_name LIKE '%maintenance%';
Затем очистите кэш object cache если включён (Redis/Memcached). На VPS: redis-cli FLUSHALL или systemctl restart memcached.
Шаг 5. Файл удалён, а обновление не завершено
Вы удалили .maintenance, сайт открылся — но плагин или тема обновились не полностью. Версия в админке новая, а часть файлов старые. Результат: белый экран или фатальная ошибка на отдельных страницах.
В этом случае — переустановить плагин вручную:
# Через WP-CLI
wp plugin install woocommerce --force
# или вручную: скачать zip с wordpress.org/plugins/ и распаковать в wp-content/plugins/
После ручной переустановки снова зайдите в wp-content/upgrade/ и удалите мусор. Затем зайдите в админку → Плагины — в списке плагинов тот, что глючил, должен стоять с актуальной версией и без ошибок.
Проверка результата
.maintenance удалится штатно.Когда способ не сработает
define( 'WP_DEBUG', true ); — на экране появится конкретная ошибка. Ищите решение по тексту ошибки (чаще всего виноват плагин, который несовместим с новой версией PHP или WP)..maintenance недостаточно — увеличьте лимит памяти в wp-config.php: define( 'WP_MEMORY_LIMIT', '256M' ); и повторите обновление..maintenance сервер продолжает отдавать закэшированную страницу обслуживания. Лечится сбросом кэша: на Beget — через панель, на VPS — systemctl restart nginx или rm -r /var/cache/nginx/*.Как предотвратить зависания в будущем
Обновляйте по одному — не жмите «Обновить всё» на 7 плагинах сразу. Каждый по отдельности: обновился → страница вернулась → следующий.
Увеличьте лимит времени выполнения в wp-config.php:
set_time_limit(300);
Настройте автоудаление .maintenance через wp-config.php (сработает на WP 5.2+):
define( 'WP_AUTO_UPDATE_CORE', true );
С этой константой WordPress будет агрессивнее завершать процесс обновления и удалять файл при любом исходе.
Частые вопросы
public_html/ (корень сайта). Включите показ скрытых файлов — галочка «Скрытые файлы» над списком. Файл .maintenance будет в списке самым первым или в самом конце. Если его нет — проблема не в режиме обслуживания, проверяйте лог ошибок PHP.max_execution_time в настройках PHP хостинга до 300 секунд.define( 'WP_ENVIRONMENT_TYPE', 'local' );. На локальном окружении WordPress не показывает страницу обслуживания посетителям. Только не ставьте эту константу на боевой сайт — при реальных обновлениях пользователи увидят WSOD вместо корректного сообщения..maintenance.Сайт не выходит из режима обслуживания?
Напишите — удалю файл, проверю обновления и верну сайт к жизни за 10 минут.