WordPress提示:Briefly unavailable for scheduled maintenance. Check back in a minute.
WordPress提示:Briefly unavailable for scheduled maintenance. Check back in a minute.

WordPress提示:Briefly unavailable for scheduled maintenance. Check back in a minute.

问题描述

下午2点打开网站,发现WordPress提示挂维护。

输出内容为

Briefly unavailable for scheduled maintenance. Check back in a minute.

翻译

由于定期维护,暂时无法使用。请稍后再回来查看。

该问题定位为WordPress自动升级导致,因为近期一直在提示自动升级。

搜索到的问题原因为:

当 WordPress 网站显示以下提示时:

“Briefly unavailable for scheduled maintenance. Check back in a minute.”

这通常是因为 WordPress 正在进行自动更新(如插件、主题或核心更新)时发生了中断或未完成的情况。具体而言,当 WordPress进入维护模式时,它会在根目录下创建一个 .maintenance 文件,用于告诉访问者网站正在维护中。

常见原因

1、更新过程中断:

更新插件或主题时,操作未完成(如服务器超时、网络问题等)。

同时更新多个插件,导致冲突或超时。

2、自动更新失败:

WordPress自动更新核心或插件时发生了错误。

3、服务器问题:

短暂的服务器性能问题导致更新中断。

解决方法

1、删除 .maintenance 文件

使用FTP工具(如FileZilla)或通过服务器控制面板登录WordPress站点的文件管理器。

查找网站根目录中的 .maintenance 文件。

根目录: 通常是 /public_html/ 或 /www/。

删除 .maintenance 文件。

刷新浏览器,检查网站是否恢复正常。

2、检查更新是否完成

登录到 WordPress 管理后台。

检查是否有未完成的插件、主题或核心更新。

如果有未完成的更新,重新手动进行更新。

3、清理缓存

如果删除 .maintenance 文件后仍然看到维护页面:

清除浏览器缓存。

如果使用了缓存插件(如 W3 Total Cache 或 WP Super Cache),清除缓存。

4、检查错误日志

如果问题仍然存在,可以查看服务器的错误日志(通常可以在主机控制面板中找到)。

检查更新是否因权限或其他问题失败。

5、手动更新插件或主题

如果某个插件或主题的更新失败导致问题,可以手动更新:

1、下载插件或主题的最新版本。

2、使用FTP将其上传到 /wp-content/plugins/ 或 /wp-content/themes/ 文件夹。

3、覆盖原文件。

预防此问题

1、备份网站:

在更新插件、主题或核心前,始终备份文件和数据库。

2、逐步更新:

避免一次性更新多个插件或主题。

3、监控服务器性能:

确保服务器有足够的资源,特别是对于共享主机。

4、使用可靠的主机:

使用支持自动修复功能的 WordPress 主机(如 Kinsta、SiteGround 等)。

实际排查过程

当我尝试排查问题时,没有在Docker中找到.maintenance文件:

// 查找 Docker 容器
# docker ps
CONTAINER ID   IMAGE                    COMMAND                   CREATED        STATUS                   PORTS                                                                            NAMES
18...   wordpress         "docker..."   8 months ago   Up 13 days               0.0.0.0:8000->80/tcp, :::8000->80/tcp, 0.0.0.0:8001->443/tcp, :::8001->443/tcp   docker-wordpress-1
// 进入 Docker 容器
# docker exec -it docker-wordpress-1 bash
# ls
fangjunyu.com.csr         wp-activate.php       wp-config.php20240309  wp-login.php ...
// 切换到 Docker 根目录
# cd /
root@18cc785cc795:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@18cc785cc795:/# pwd
/
// 查找 .maintenance 文件
root@18cc785cc795:/# find / -name .maintenance
find: '/proc/1/map_files': Operation not permitted
find: '/proc/6048/map_files': Operation not permitted
...

当我重新访问站点时,WordPress恢复正常,但还是之前的升级报错:

自动升级 WordPress 失败

禁止WordPress自动升级

因为WordPress自动升级的时间点无法控制,比如这次是周一的下午2点无法访问,比较尴尬的升级时间。

因此,可以考虑禁止WordPress的自动升级功能,可以通过修改配置文件和代码来实现。这包括禁止核心文件、插件、和主题的自动更新。

修改 wp-config.php 文件

1、打开 WordPress 的主目录,找到 wp-config.php 文件。

如果是Docker容器,则在Docker容器的WordPress主目录中:

2、编辑文件并添加以下代码

define('AUTOMATIC_UPDATER_DISABLED', true);
define('WP_AUTO_UPDATE_CORE', false);

1)禁用所有自动更新

define('AUTOMATIC_UPDATER_DISABLED', true);

2)禁用核心更新

define('WP_AUTO_UPDATE_CORE', false);

说明

1)AUTOMATIC_UPDATER_DISABLED:

包括核心(小版本和大版本)、插件、主题的自动更新。

如果设置为 true,WordPress 自动更新功能将被彻底禁用。

2)WP_AUTO_UPDATE_CORE:

控制 WordPress 核心的自动更新行为。

false:禁用所有核心自动更新(包括小版本和大版本)。

‘minor’:允许小版本更新(默认设置)。

true:启用所有核心版本的自动更新(包括大版本和小版本)。  

注意1: WP_AUTO_UPDATE_CORE的’minor’是用单引号包裹,表示字符串。

注意2:禁用更新的代码是需要手动添加的,原文件没有禁用更新的代码,所以grep是检索不到更新代码的的。

在wp-config文件中配置禁用代码:

因为每次加载WordPress页面时,wp-config.php文件都会动态读取,所以无需重启服务器。

通过过滤器禁用自动更新

如果需要更细粒度的控制,可以在主题的 functions.php 文件中添加以下代码:

1、禁用所有更新

add_filter('automatic_updater_disabled', '__return_true');

2、禁用插件更新

add_filter('auto_update_plugin', '__return_false');

3、禁用主题更新

add_filter('auto_update_theme', '__return_false');

4、禁用核心更新

add_filter('auto_update_core', '__return_false');
是否与 wp-config.php 的禁用设置冲突?
1、工作机制的不同

wp-config.php

通过常量(AUTOMATIC_UPDATER_DISABLED 和 WP_AUTO_UPDATE_CORE)全局控制自动更新行为。

适用于全站范围的配置。

functions.php

通过过滤器更灵活地控制自动更新,允许对特定组件(如主题、插件)进行定制。

针对当前主题生效(如果切换主题,配置可能失效)。

2、是否会冲突?

不会直接冲突,但优先级可能影响最终行为:

如果在 wp-config.php 中禁用了自动更新(如 AUTOMATIC_UPDATER_DISABLED 设置为 true),过滤器可能不会被触发,因为全局禁用已生效。

如果 wp-config.php 没有禁用自动更新,则过滤器会正常生效,控制主题或插件的更新行为。

禁用更新通知(可选)

如果不想收到更新通知,可以添加以下代码到主题的 functions.php 文件,可以完全禁用更新检查和通知:

// 禁用核心更新检查
add_filter('pre_site_transient_update_core', '__return_null');

// 禁用插件更新检查
add_filter('pre_site_transient_update_plugins', '__return_null');

// 禁用主题更新检查
add_filter('pre_site_transient_update_themes', '__return_null');

使用插件禁用自动更新

如果不想手动修改代码,可以使用插件来禁用自动更新。例如:

Easy Updates Manager:

允许你通过图形界面控制所有更新设置。

安装后,可以在“更新选项”中选择关闭自动更新。

关闭自动更新提示

当修改wp-config.php以及functions.php文件后,仪表盘还有升级失败的提示:

禁用代码可能在 WordPress 已经触发更新后才生效,因此后台仍然提示更新失败。

目前还没有解决方案,怀疑是数据库的某个字段没有同步或者WordPress文件内容没有修改导致的。

临时解决方案:

在主题的 functions.php 中添加以下代码:

add_action('admin_head', function () {
    echo '<style>.update-nag, .notice.notice-error { display: none !important; }</style>';
});

更新文件后,控制台的提示内容消失。

网上的普遍说法是检查 .maintenance 文件,但实际上我并没有找到这个文件。因此,不再过多赘述。

注意事项

1、安全性影响

禁用自动更新后,WordPress核心和插件的安全补丁将不会自动安装,可能增加安全风险。

如果禁用更新,建议定期手动检查更新并安装重要的安全补丁。

2、自动备份

配合自动备份机制(如使用插件 UpdraftPlus 或 BackupBuddy),以便在需要更新或修复时有备份可用。

3、检查设置

可以通过 Site Health(站点健康)功能检查自动更新是否被禁用。

总结

完成上述步骤后,WordPress 的自动升级功能将被完全禁用,所有更新需要手动进行。

此外,还注意到本次的wp-config.php文件显示存在乱码,下次有时间会更新处理该乱码的文章,目前先不深入研究,如果你也存在该问题,那就只输入代码进去。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注