自动更新要配边界
无人值守升级(unattended-upgrades)让系统自动安装安全补丁,适合对变更不敏感的角色。它的风险点也很明确:默认的重启行为可能在夜里把生产机重启,或者把关键中间件的更新在业务高峰装上引发兼容问题。正确做法是让自动化只负责「装」,重启与高风险包交给人工或编排窗口。
基本信息
| 适用平台 | Linux(Debian / Ubuntu) |
|---|---|
| 风险等级 | 中 |
| 基线要求 | 自动化策略与业务节奏匹配 |
| 关键配置 | /etc/apt/apt.conf.d/ 下的 20auto-upgrades 与 50unattended-upgrades |
| 验证方式 | unattended-upgrade --dry-run |
典型使用场景
- 大批量非核心主机希望免人工打安全补丁
- 排查机器半夜自动重启的原因
- 把中间件排除在自动升级之外
- 新机器装机时统一配置自动更新策略
- 上线前用 dry-run 验证会安装哪些包
配置与验证
配置与验证
sudo dpkg-reconfigure -plow unattended-upgrades # 交互式启用自动更新
grep -E 'Unattended-Upgrade|Automatic-Reboot' /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/50unattended-upgrades # 核对关键参数
sudo unattended-upgrade --dry-run -d 2>&1 | tail -20 # 干跑看会安装哪些包
systemctl status unattended-upgrades | head -5 # 确认定时器与服务状态关键参数示例
关键参数示例
# Unattended-Upgrade::Automatic-Reboot "false"; # 关闭自动重启
# Unattended-Upgrade::Automatic-Reboot-Time "03:00"; # 如需重启则指定时间
# Unattended-Upgrade::Package-Blacklist { "nginx"; "mysql-server"; }; # 排除高风险包配置项读法
| 配置项 | 含义 | 注意点 |
|---|---|---|
| Automatic-Reboot | 内核更新后是否自动重启 | 生产上建议关闭 |
| Automatic-Reboot-Time | 允许重启的时间点 | 需与业务低峰一致 |
| Package-Blacklist | 不参与自动升级的包 | 核对实际包名与变体名 |
| 更新源范围 | 是否只安装安全更新 | 避免引入功能性变更 |
| 定时器状态 | unattended-upgrades 是否在跑 | 确认服务真的在执行 |
自动重启是常见事故源:内核更新后的重启应由业务窗口决定,自动化只负责装包,重启交给人工或编排流程。
黑名单里写了包名要核对仓库里的实际名称(不少是带后缀的变体名),名字对不上等于没排除,升级照样会发生。
自动更新跑起来后要留下一次执行记录:从 /var/log/unattended-upgrades/ 的日志确认每个周期真的装了包,长期看不到日志说明服务根本没有生效。