网站已运行 164 · 04小时 · 32 · 26
目录

WordPress 维护模式卡住怎么办?.maintenance 文件安全恢复

WordPress 更新中断后进入维护模式并安全恢复的示意图

WordPress 维护模式卡住,最常见的现象是更新核心、插件或主题后,前台一直显示“正在执行例行维护,请稍候再试”。这通常不等于网站内容丢失,也不一定需要重装 WordPress;更常见的是更新流程中断后,站点根目录里的 .maintenance 文件没有按预期退出。

但我不建议看到提示就立刻删文件。更稳妥的顺序是:先确认更新进程已经停止,分清默认维护模式、维护插件和缓存页面,再建立回滚点,最后只处理真正触发维护模式的对象。这样既能尽快恢复访问,也不会把仍在写文件的更新过程再次打断。

WordPress 维护模式卡住时,先分清是哪一种页面

不同维护页面的处理方式完全不同。先看 HTTP 状态、页面文案和站点根目录,不要只凭外观判断:

现象更可能是什么第一步检查
标准维护提示,HTTP 503WordPress 核心更新维护模式根目录 .maintenance 与 WP-CLI 状态
自定义倒计时、品牌页面,常返回 200维护模式或 Coming Soon 插件活动插件、页面规则和登录用户可见性
文件已不存在,部分地区仍看到旧页面浏览器、页面缓存或 CDN 缓存源站响应、缓存命中头和无缓存请求
空白页、500 或 Fatal error更新失败引发 PHP、插件或主题故障错误日志与插件加载对照
先确认维护页面来自 WordPress 核心、插件还是缓存层,再决定是否处理文件。

如果实际返回的是 500 或错误日志出现 Fatal error,应改按 WordPress 500 错误排查流程处理,不要把所有 5xx 都当成维护模式。

WordPress 为什么会生成 .maintenance 文件

WordPress 执行核心、插件或主题更新时,会在安装根目录临时创建 .maintenance。当前 WordPress 7.1 核心的 wp_is_maintenance_mode() 会读取文件里的 $upgrading 时间戳;时间戳距当前不足 10 分钟时,WordPress 会进入维护模式。

默认维护响应是 HTTP 503,并带有 Retry-After: 600。如果 wp-content/maintenance.php 存在,WordPress 还可以加载自定义维护页面。核心更新正常结束后会退出维护模式;下载中断、PHP 超时、磁盘或权限异常、浏览器提前关闭,都可能让现场没有被正常收尾。

这里有个容易忽略的细节:核心代码会把超过 10 分钟的旧时间戳视为维护结束。因此,标准提示持续很久时,不要只盯着“文件存在”这一点;还要检查文件内容是否被持续刷新、是否存在自定义维护文件,以及缓存或维护插件是否仍在提供另一张页面。

第一步:先确认更新已经停止

刚点击更新后只过去几十秒,先等待一两分钟并观察后台、主机面板或部署日志。大型插件、共享主机和网络较慢的环境,写文件可能确实需要更久。下面这些情况更像“卡住”,而不是仍在正常更新:

  • 维护提示持续超过预期时间,后台更新进度不再变化;
  • 主机面板没有活动更新任务,PHP 或部署进程已经结束;
  • 错误日志在同一时间出现超时、权限、磁盘空间或下载失败;
  • 重新登录后台仍提示更新失败,且目标插件或核心版本没有完成切换。

如果不能确认更新是否仍在写文件,先联系主机商或查看进程与日志,不要直接处理 .maintenance。对于生产站,恢复访问之前也要确认最近备份可用;本站的 UpdraftPlus 远程备份设置可以作为备份思路参考。

第二步:用 WP-CLI 和文件检查交叉确认

有 SSH 和 WP-CLI 时,先执行只读检查:

cd /path/to/wordpress
wp maintenance-mode status
ls -la .maintenance
ls -la wp-content/maintenance.php

wp maintenance-mode status 用于判断 WP-CLI 识别到的维护状态;后两条命令分别检查根目录标记文件和自定义维护页面。看到“文件不存在”不是错误,它反而说明默认核心维护模式可能已经退出,需要继续查插件或缓存层。

没有 SSH 时,可以通过主机文件管理器、SFTP 或 FTP 打开包含 wp-adminwp-contentwp-includes 的目录。注意开启“显示隐藏文件”,因为以点开头的 .maintenance 经常默认不可见。

第三步:安全退出 WordPress 维护模式

确认更新已经停止并准备好回滚点后,优先使用 WP-CLI:

wp maintenance-mode deactivate
wp maintenance-mode status

如果 WP-CLI 无法加载,可以在站点根目录把文件改名,而不是直接永久删除。下面的示例文件名只是为了保留现场,确认恢复无误后再按你的备份策略处理:

cd /path/to/wordpress
mv .maintenance .maintenance.stale-20260825

SFTP 或主机文件管理器同样可以把 .maintenance 改名。WordPress 官方文档给出的直接恢复方法是删除该文件;实际项目里我更倾向于先改名,因为它能保留时间戳和文件内容,方便确认更新为什么没有正常收尾。

一次本站只读实测:哪些结果才算互相印证

2026 年 8 月 25 日,我在本站 WordPress 7.1 环境做了只读检查,没有开启维护模式、更新插件或修改文件。结果如下:

检查项本站结果能说明什么
wp maintenance-mode statusMaintenance mode is not activeWP-CLI 未识别到活动维护模式
根目录 .maintenance不存在没有默认维护标记文件
wp-content/maintenance.php不存在没有核心自定义维护页面 drop-in
前台 HTTP200公开页面当前可正常访问
核心函数存在 10 分钟阈值判断与 WordPress 7.1 当前源码一致
状态命令、文件存在性、HTTP 响应和当前核心源码相互一致,结论才更可靠。

这组结果不是为了证明本站曾经卡住,而是演示排查时怎样建立正常基线。单看首页 200,可能只是缓存;单看文件不存在,也不能排除维护插件。把多个只读信号放在一起,才不容易误删文件或误判故障层。

恢复访问后必须继续检查更新结果

移走 .maintenance 只是退出维护状态,不代表更新已经成功。至少继续检查:

  1. 首页、登录页、后台和关键业务页面是否返回预期状态;
  2. 核心、插件或主题版本是否已经完成切换,而不是停在半更新状态;
  3. 后台“更新”页面是否仍提示失败或需要数据库升级;
  4. PHP、Web 服务器和 WordPress 日志是否还有新的致命错误;
  5. 磁盘空间、目录所有者和写入权限是否满足下一次更新;
  6. 只清理必要页面和相关缓存,再从前台复测真实响应;
  7. 确认表单、登录、支付、订单和定时任务等关键功能没有受影响。

需要临时读取 WordPress 错误日志时,可以参考 WP_DEBUG 与生产环境日志安全排查。不要为了找原因把错误直接显示给访客,也不要在公开截图中暴露服务器路径、账号和密钥。

为什么维护模式会反复卡住

  • PHP 超时或内存不足:更新流程在清理标记文件前中断;
  • 磁盘空间不足:压缩包能下载,但解压或替换文件失败;
  • 文件所有者或权限不一致:WordPress 无法覆盖旧文件或删除临时文件;
  • 一次更新太多组件:执行时间拉长,也更难确认是哪一个失败;
  • 网络或仓库连接不稳定:下载包不完整,更新停在中间阶段;
  • 安全、缓存或部署工具介入:文件操作被阻止,或旧维护页被继续缓存。

如果每次更新都会重现,不要把“删除 .maintenance”当成永久修复。记录失败组件、时间和错误签名,先在测试环境复现,再处理权限、资源或兼容问题。一次只更新一个高风险组件,也比全部勾选后再猜原因更容易回滚。

总结

WordPress 维护模式卡住时,真正安全的恢复流程不是“找到文件就删”,而是先确认更新停止,分清核心维护模式、插件页面和缓存,再用 WP-CLI、文件与 HTTP 状态交叉验证。有备份后退出维护模式,并继续检查版本、日志、权限和关键业务,才能确定站点只是恢复显示,还是更新已经完整结束。

参考资料:WordPress.org《FAQ Troubleshooting》WordPress.org《Updating WordPress》Developer.WordPress.org《wp maintenance-mode》Developer.WordPress.org《wp_is_maintenance_mode()》Developer.WordPress.org《wp_maintenance()》

数臻源码猫咪图标
目录
数臻源码猫咪图标

目录

标签云: