You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下unattended-upgrades无法通过cronjob启动的解决方法问询

Ubuntu 20.04下unattended-upgrades无法通过cronjob启动的解决方法问询

你好,我看到你在Ubuntu 20.04里遇到了unattended-upgrades没法通过/etc/cron.daily/apt-compat这个定时任务启动的问题——核心原因就是脚本里那段检查systemd的逻辑直接让脚本退出了。咱们不用删/run/systemd/system目录,有几个可行的解决思路:

先理清楚问题根源

脚本里这段判断的初衷是:认为systemd环境下用systemd timer来执行更新更合理(它的随机调度能避免大家同时挤镜像源),但你更倾向于用cronjob触发,而且不想动/run/systemd/system这个有实际文件的目录,完全可以理解。

方法一:临时绕过判断(快速验证)

如果只是想先测试让cronjob触发一次,可以直接修改apt-compat脚本里的判断逻辑:
打开脚本:

sudo nano /etc/cron.daily/apt-compat

把原来的:

if [ -d /run/systemd/system ]; then
exit 0
fi

改成:

if [ -d /run/systemd/system ] && false; then
exit 0
fi

这样这个判断永远不会成立,脚本就会继续执行下去。不过要注意,系统后续更新可能会覆盖这个脚本,所以这是临时方案。

方法二:自定义cron任务(推荐,持久化)

既然核心执行命令/usr/lib/apt/apt.systemd.daily本身是正常的,咱们可以绕开apt-compat,直接创建自己的定时任务:

  1. 在cron.daily目录下新建自定义脚本:
sudo nano /etc/cron.daily/my-unattended-upgrades
  1. 写入以下内容:
#!/bin/bash
exec /usr/lib/apt/apt.systemd.daily
  1. 给脚本添加执行权限:
sudo chmod +x /etc/cron.daily/my-unattended-upgrades

这样每天cron会自动执行这个自定义脚本,直接触发更新,完全不受原apt-compat的判断逻辑影响,而且不会被系统更新覆盖。

方法三:修改判断逻辑为标志文件控制(持久化)

如果想保留原apt-compat脚本的逻辑,只是让它跳过退出判断,可以把判断改成依赖一个自定义标志文件:

  1. 编辑apt-compat脚本:
sudo nano /etc/cron.daily/apt-compat
  1. 将原来的判断替换为:
# 仅当存在systemd目录且不存在强制cron更新的标志文件时退出
if [ -d /run/systemd/system ] && [ ! -f /force-cron-apt-upgrade ]; then
exit 0
fi
  1. 创建标志文件:
sudo touch /force-cron-apt-upgrade

这样脚本检测到标志文件存在,就会继续执行cron触发的更新。除非系统更新完全替换apt-compat脚本,否则这个修改会一直生效。

你已经验证过核心更新命令是正常的,所以上面任意一种方法都能解决你的问题,根据自己的需求选就行~

备注:内容来源于stack exchange,提问作者Uwe Bartels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:28:16