Ubuntu定时器如何更新
小樊
34
2025-12-30 00:07:53
Ubuntu 定时器更新指南
一 系统包更新的定时器更新
- Ubuntu 默认通过 APT 的 systemd 定时器执行日常更新:每天触发 apt-daily.timer(默认 06:00、18:00)运行 apt-daily.service(执行 update),以及 apt-daily-upgrade.timer(默认 06:00)运行 apt-daily-upgrade.service(执行 install)。这些服务实际调用 /usr/lib/apt/apt.systemd.daily 脚本完成检查、下载与安装。要“更新”这些定时器,本质是调整其触发时间或行为。
- 查看与生效
- 查看状态与下次触发时间:sudo systemctl status apt-daily.timer apt-daily-upgrade.timer
- 列出所有活动定时器:systemctl list-timers
- 重新加载配置(修改后):sudo systemctl daemon-reload
- 调整触发时间(例:将升级任务改为每天 02:30)
- 编辑定时器:sudo systemctl edit --full apt-daily-upgrade.timer
- 将 OnCalendar= 改为:OnCalendar=--* 02:30:00
- 启用并重启定时器:sudo systemctl enable --now apt-daily-upgrade.timer
- 可选:同时调整 apt-daily.timer 的时间(如保持与升级错峰)
- 编辑:sudo systemctl edit --full apt-daily.timer
- 设置:OnCalendar=--* 03:30:00
- 启用:sudo systemctl enable --now apt-daily.timer
- 说明:上述定时器调用 apt.systemd.daily,其具体更新策略由 /etc/apt/apt.conf.d/10periodic 与 /etc/apt/apt.conf.d/20auto-upgrades 控制(如 APT::Periodic::Update-Package-Lists、APT::Periodic::Unattended-Upgrade 等)。如需变更下载/安装频率,可同步调整这些配置项。
二 自定义定时器的更新(创建或修改)
- 使用 Systemd Timer(推荐)
- 创建服务单元:/etc/systemd/system/mytask.service
- [Unit] Description=My Custom Task
- [Service] Type=oneshot ExecStart=/usr/local/bin/mytask.sh
- 创建定时器单元:/etc/systemd/system/mytask.timer
- [Unit] Description=Run daily at 08:00
- [Timer] OnCalendar=--* 08:00:00 Persistent=true
- [Install] WantedBy=timers.target
- 使生效与验证
- 重载:sudo systemctl daemon-reload
- 启用并启动:sudo systemctl enable --now mytask.timer
- 查看下次触发:systemctl list-timers
- 查看日志:journalctl -u mytask.timer -u mytask.service
- 使用 Cron(传统方案)
- 编辑:crontab -e(或 sudo crontab -e 为 root)
- 示例:每天 02:00 执行脚本并记录日志
- 0 2 * * * /usr/local/bin/mytask.sh >> /var/log/mytask.log 2>&1
- 常用管理:crontab -l(查看)、crontab -r(删除全部,谨慎)、systemctl status cron(查看服务状态)。
三 自动安全更新的启用与更新
- 安装与启用
- 安装组件:sudo apt update && sudo apt install unattended-upgrades
- 交互启用:sudo dpkg-reconfigure --priority=low unattended-upgrades(会自动创建/更新 /etc/apt/apt.conf.d/20auto-upgrades)
- 关键配置
- 编辑允许来源:/etc/apt/apt.conf.d/50unattended-upgrades
- 确保包含安全源:“${distro_id}:${distro_codename}-security”;
- 可按需开启自动重启、维护时段、邮件通知等
- 频率与行为(/etc/apt/apt.conf.d/10periodic 与 20auto-upgrades)
- 示例:APT::Periodic::Update-Package-Lists “1”; APT::Periodic::Unattended-Upgrade “1”;
- 验证与查看
- 查看日志:journalctl -u apt-daily-upgrade.service
- 查看定时器:systemctl list-timers | grep apt
四 常见问题与排查
- 修改后未生效:执行 sudo systemctl daemon-reload 并确认定时器已启用(enable --now),再用 systemctl list-timers 与 journalctl 核对。
- 时间表达错误:OnCalendar 使用“日历时间”语法(如 --* 08:00:00);Cron 使用 5 字段时间语法(分 时 日 月 周)。
- 需要开机补做错过的任务:在 Timer 中设置 Persistent=true。
- 避免交互与重启阻塞:自动更新建议使用 unattended-upgrades;若用 Cron 直接执行 apt,需自行处理交互与重启策略。