在 Ubuntu 中定时更新软件包,主要有两种方案,您可以根据需求选择。
此方法通过 unattended-upgrades 工具实现,是 Ubuntu 官方推荐的方案,尤其适合服务器,可以自动安装安全补丁并清理旧文件。
bash
sudo apt update sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
在弹出的向导中,选择 Yes 以启用自动更新。
编辑配置文件,指定需要自动更新的软件源。 bash sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
找到 Unattended-Upgrade::Allowed-Origins 部分,确保至少启用了安全更新源。以 22.04 (jammy) 为例:
json
Unattended-Upgrade::Allowed-Origins {
“${distro_id}:${distro_codename}-security”;
// “${distro_id}:${distro_codename}-updates”; // 如需更新常规补丁,取消此行注释
// “${distro_id}ESM:${distro_codename}”; // 订阅 ESM 时启用
};
常用可选配置:
自动移除无用依赖 json Unattended-Upgrade::Remove-Unused-Dependencies “true”;
自动重启系统 (内核或关键组件更新后需要) json Unattended-Upgrade::Automatic-Reboot “true”; Unattended-Upgrade::Automatic-Reboot-Time “02:00”; // 设置在凌晨 2 点重启
编辑周期任务配置文件。 bash sudo nano /etc/apt/apt.conf.d/20auto-upgrades
确保内容如下,表示每天检查、下载并自动升级: ini APT::Periodic::Update-Package-Lists “1”; // 每天更新软件包索引 APT::Periodic::Download-Upgradeable-Packages “1”; // 每天下载可升级的包 APT::Periodic::AutocleanInterval “7”; // 每 7 天清理一次本地缓存 APT::Periodic::Unattended-Upgrade “1”; // 每天执行自动升级
启动服务 bash sudo systemctl enable --now unattended-upgrades
模拟运行 (试运行) bash sudo unattended-upgrades --dry-run --debug
查看日志 bash tail -f /var/log/unattended-upgrades/unattended-upgrades.log
如果您需要更灵活的更新策略(如更新所有包、在特定时间执行),可以使用 cron 定时任务。
bash sudo crontab -e
根据需求选择以下示例添加到文件末尾:
示例 1:每天凌晨 3 点更新所有软件包 text 0 3 * * * /usr/bin/apt update && /usr/bin/apt -y full-upgrade && /usr/bin/apt -y autoremove && /usr/bin/apt -y autoclean
示例 2:每 6 小时检查并升级安全更新 text 0 */6 * * * /usr/bin/apt update && /usr/bin/apt -y upgrade && /usr/bin/apt -y autoremove && /usr/bin/apt -y autoclean
⚠️ 注意 直接在
cron中执行apt upgrade可能会因锁文件或交互式提示导致失败。对于生产环境,强烈推荐使用方案一unattended-upgrades,它专为无人值守场景设计,更加稳定可靠。