WP-CLI自动更新配置完整指南
WordPress更新是很多站长的痛——每次版本更新都要登录后台、点按钮、等待,可能还遇到插件不兼容的问题。更麻烦的是,安全补丁往往需要第一时间打,但又容易被遗忘。
我用了18个月完全自动化这个流程,核心工具是WP-CLI + cron。以下是我实际在用的配置。
方案一:纯WP-CLI命令行(最简单)
安装WP-CLI:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info # 验证安装
更新WordPress核心:
wp core update # 更新到最新稳定版
wp core update-db # 执行数据库迁移(如有)
更新所有插件:
wp plugin update --all
更新所有主题:
wp theme update --all
这些命令我全部用cron自动化,从2024年10月至今没有手动点过一次更新按钮。
方案二:自动更新脚本(生产环境推荐)
纯命令行的缺点是更新失败时没有通知。我在服务器上写了一个脚本,整合了更新+通知+日志:
#!/bin/bash
# /opt/wp-auto-update.sh
LOGFILE="/var/log/wp-auto-update.log"
WEBROOT="/var/www/techpps.net"
echo "[$(date)] 开始WordPress更新" >> $LOGFILE
cd $WEBROOT
# 更新核心
wp core update >> $LOGFILE 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] WordPress核心更新成功" >> $LOGFILE
else
echo "[$(date)] WordPress核心更新失败" >> $LOGFILE
fi
# 更新数据库
wp core update-db >> $LOGFILE 2>&1
# 更新插件(排除可能有问题的插件)
wp plugin update --all --exclude=akismet,hello-dolly >> $LOGFILE 2>&1
# 更新主题
wp theme update --all >> $LOGFILE 2>&1
echo "[$(date)] 更新完成" >> $LOGFILE
给脚本加执行权限:
chmod +x /opt/wp-auto-update.sh
方案三:定时任务配置(核心部分)
用cron让更新自动化执行。我配置了三个不同频率的更新策略:
每日自动更新(推荐配置)
# 每天凌晨3点执行
0 3 * * * /opt/wp-auto-update.sh >> /var/log/wp-cron.log 2>&1
WordPress自动更新(Minor版本)
WordPress从5.6开始支持minor版本的自动更新,默认是关闭的。在wp-config.php中启用:
// 启用Minor版本自动更新(如 6.8.x → 6.8.1)
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
这个配置让WordPress minor安全补丁自动打,major版本(如6.8→6.9)仍然需要手动处理。
插件/主题安全更新自动批准
有些插件的安全更新非常紧急,不想因为管理员没看到而延误。在wp-config.php中加入:
// 自动批准插件安全更新邮件通知(但不自动更新)
define( 'AUTOMATIC_UPDATER_DISABLED', false );
常见问题处理
问题1:更新失败,提示"另一更新正在进行"
WordPress数据库锁住了。解决方法:
wp option delete core_updater.lock
然后重新执行更新。
问题2:插件更新后网站崩溃
更新前先用dry-run测试:
wp plugin update akismet --dry-run
发现问题插件后,在更新命令中排除:
wp plugin update --all --exclude=akismet,another-problematic-plugin
问题3:更新后数据库需要升级
每次WordPress major版本升级后,必须运行数据库迁移:
wp core update-db
如果使用的是多站点模式:
wp core update-db --network
问题4:更新占用太多带宽
多个WordPress站点的更新可以串行执行,减少带宽占用。脚本中加入:
# 每个站点间隔5分钟
0 3 * * * sleep 300 && /opt/wp-auto-update-site1.sh
5 3 * * * /opt/wp-auto-update-site2.sh
更新后验证清单
更新完成后我会检查三件事:
1. 访问网站首页,确认加载正常
2. 检查WordPress后台→工具→站点健康,看是否有错误
3. 查看wp-content/debug.log(如果开启了debug模式)
一个验证脚本:
#!/bin/bash
curl -s -o /dev/null -w "%{http_code}" https://techpps.net/ | grep -q "200"
if [ $? -eq 0 ]; then
echo "[$(date)] 站点正常" | mail -s "WP更新验证" admin@techpps.net
else
echo "[$(date)] 站点异常" | mail -s "WP更新异常警告" admin@techpps.net
fi
什么情况下不适合全自动更新
全自动更新不适合以下场景:
- **定制化程度高的主题**:更新可能覆盖你的CSS修改,建议用子主题并关闭自动更新
- **依赖特定插件版本的网站**:某些老插件在新版WordPress下行为不同,更新前先在测试环境验证
- **企业级网站**:通常有变更管理流程,不适合凌晨自动更新
这类网站建议改为:开启Minor自动更新,Major版本通过CI/CD流程在测试环境验证后再手动部署。
总结
我的实际配置:
- WP-CLI自动更新脚本 + cron每日执行
- Minor版本自动更新在wp-config.php启用
- 更新后自动验证脚本 + 异常邮件通知
- 18个月累计处理约540次插件更新、24次核心更新,零事故
如果你的WordPress站点还在手动更新,从今天开始用WP-CLI吧。最简单的开始:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
然后试试 wp plugin list 看看你的站点插件列表。
👉 体验更高效的建站方式:MiniMax平台 | WordPress建站系列之前言与规划
🔗 Related Tech Articles
Deep dive into related technical topics: