本文约 2,828 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
你正准备给 WordPress 更新插件或核心,进度条转了几圈,页面突然跳出一行字:”正在执行例行维护,请记住在几分钟后回来。”(英文原话是 Briefly unavailable for scheduled maintenance. Check back in a minute.)你以为等一分钟就好,结果十分钟、一小时过去,前台后台全部打不开,反复刷新还是这句话。这种”卡在维护模式”的现象在共享主机、国内低配 VPS、网络不稳定的环境里特别常见,尤其是更新大版本核心或某个体积较大的插件时最容易触发。它和普通 500 错误有一个明显区别:页面能正常输出这段文字,说明 Web 服务和 PHP 进程都是活着的,MySQL 大概率也没挂,问题只出在一个被”忘记删除”的小文件上。本文把这套维护模式的来龙去脉讲清楚,再给你三种照着做就能成功的删除方法,让网站尽快恢复访问。
故障原因分析
.maintenance是一个真实存在的维护标记文件。 WordPress 在执行核心、插件、主题更新时,会在网站根目录创建一个名为.maintenance的文件,用来告诉程序”现在正在升级,先别让别人访问”。
- 它由升级程序创建和删除。 后台点”更新”时,核心的文件升级类(WP_Upgrader)会先调用维护开始逻辑写出这个文件,等升级完成后调用维护结束逻辑把它删掉。正常流程一进一出,用户几乎感知不到。
- 更新中途失败,文件就删不掉了。 只要升级过程被意外打断,维护结束逻辑就不会执行,
.maintenance于是长期留在根目录。常见打断原因有:PHP 执行超时(共享主机常见 30 秒限制)、内存不足、FTP/SSH 凭据填错、磁盘空间写满、文件权限不足、浏览器被关闭、主机把进程杀掉等。
- WordPress 每次加载都会检查它。 只要根目录里存在
.maintenance,WordPress 在加载阶段就会直接输出维护页面、返回 503 状态码,然后中止后续所有加载。所以前台打不开、后台同样进不去——因为它在主题和插件加载之前就拦住了。
- 文件本身无害,只是内容记录了一个时间戳。
.maintenance里通常只有一行<?php $upgrading = 一个Unix时间戳;,不携带任何恶意代码,删除它对网站数据没有任何影响。
分步解决方案
先记住一个关键位置:.maintenance 必须位于 WordPress 根目录,也就是和 wp-config.php、wp-admin、wp-content 同一个层级,不在 wp-content 里面。
方法一:用主机面板的文件管理器(最适合宝塔/cPanel/虚拟主机)
- 登录主机控制面板,例如宝塔面板的”文件”、cPanel 的”文件管理器”、阿里云云虚拟主机的”文件管理”。
- 进入网站根目录,常见名字是
public_html、wwwroot、htdocs或/www/wwwroot/你的域名。 - 打开面板顶部的”显示隐藏文件“开关。
.maintenance以点开头,默认是隐藏的,不开这个选项根本看不到。 - 找到
.maintenance,选中后删除。 - 回到网站刷新,维护页消失即恢复成功。
为稳妥起见,也可以先把它改名为 .maintenance.bak,确认网站正常后,下次进面板再彻底删除。
方法二:用 FTP / SFTP 工具
- 用 FileZilla 之类的工具连接到服务器。
- 在菜单里开启隐藏文件显示(FileZilla Windows 版:服务器菜单勾选”强制显示隐藏文件”)。
- 进入网站根目录,找到
.maintenance,右键删除。
方法三:用 SSH 命令行(适合有服务器权限的站长)
# 先进到网站根目录,路径按你的实际情况替换
cd /www/wwwroot/mimangfei.com
# 确认文件在不在
ls -la | grep maintenance
# 删除它
rm -f .maintenance
如果提示权限不足,说明文件属主不是你当前的 SSH 用户,可以尝试:
sudo rm -f .maintenance
删不掉怎么办
- 面板里点删除没反应:多半是权限或占用问题,改用 SSH 执行
rm,或在面板里先把文件权限改为 644、属主改为当前 web 用户再删。 - 提示 Permission denied:说明文件被 root 或 PHP 用户所有,用
sudo或面板的”修改权限/属主”功能处理。 - 删完还打不开:先开无痕窗口或按 Ctrl+F5 强制刷新。如果用了 CDN、Nginx 缓存插件或 Redis 对象缓存,503 维护页可能被缓存了,需要清空浏览器、CDN 和插件缓存。
删完仍异常,要怀疑数据库是否升级到一半
如果这次卡住发生在核心大版本升级过程中,除了 .maintenance,WordPress 还可能处于”数据库需要升级”状态。此时页面通常不会显示维护文字,而是跳到 /wp-admin/upgrade.php。这种情况请不要手动乱改数据库,先备份数据库,再从浏览器访问升级地址按提示完成升级。
常见踩坑点
- 找错位置。 绝大多数人第一反应是去
wp-content里翻,其实.maintenance在根目录,与wp-config.php同级。 - 没开”显示隐藏文件”。 以点开头的文件在 FTP 和面板里默认被隐藏,看不到就以为”文件不存在”,白折腾半天。
- 更新其实还在跑,你却把文件删了。 如果你刚点更新没多久,进程可能真的还在执行。特别是正在升级数据库时,中途删掉维护文件会让前台在数据表结构变更到一半时被访问,可能造成数据异常,建议先等几分钟。
- 只删了维护文件,没解决根本原因。 如果是磁盘写满或目录权限不对导致更新失败,下次更新还会卡在同一处,务必回头解决。
- 缓存骗了你。 删掉文件后看到同一个页面,可能是浏览器、CDN 或缓存插件返回的旧页面,用无痕窗口验证最靠谱。
- 指望后台有”关闭维护模式”开关。 后台都进不去,哪里来的开关;老老实实走文件系统删除。
总结
卡在”正在执行例行维护”并不代表网站坏了,绝大多数情况只是更新中断后留下的 .maintenance 文件在作怪。记住两点就够了:它的位置在网站根目录,与 wp-config.php 同级;它的处理方式是显示隐藏文件后删除,或者用 SSH 执行 rm -f .maintenance。恢复访问之后,建议顺手排查这次更新失败的原因——是 PHP 超时、内存不够、磁盘写满,还是文件权限不对,把根因解决掉,下次更新才不会再卡在维护模式。把”更新前先备份数据库和文件、一次只更新一个插件、尽量在访问量低的时段操作”变成习惯,WordPress 的更新过程会稳定得多,你也能从反复救火里解放出来。
