自动 apt-get 升级中途退出

自动 apt-get 升级中途退出

我设置了rootcron 来自动运行apt-get upgrade。很简单。下面是具体行:

@daily (apt-get update && apt-get -y upgrade) 2>&1 > /var/log/tmp.log

但是,我一直在关注日志文件的输出,它总是停在输出中通常(即没有-y)询问的部分Do you want to continue [Y/n]?。我确认它没有继续运行,因为apt-get upgrade仍然显示需要更新的包。为什么它在此时停止?我该如何让它继续?

编辑:

### apt-get update output ###  

Building dependency tree...
Reading state information...
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
The following packages will be upgraded:
  file libgudev-1.0-0 libmagic1 libpam-systemd libsystemd-daemon0
  libsystemd-login0 libudev1 linux-libc-dev openssh-client openssh-server
   systemd-services udev
12 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/3,412 kB of archives.
After this operation, 16.4 kB of additional disk space will be used.

修改 2:我缩短了命令以尝试找出问题。我还阅读了man apt-get。我找到了一个可能需要通过的新标志,剩下:

@daily apt-get -y --force-yes upgrade 2>&1 > /var/log/tmp.log

不幸的是,我仍然得到相同的结果:(

答案1

tldr;不要假设任何中的环境变量cron(包括PATH)。

几天后,我意识到我是个白痴,把它放2>&1错了地方。把它放在日志文件名后面后,它给了我导致问题的错误:

dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin

有了这个新信息,我最后成立另一篇帖子有同样的问题。事实证明,cron的环境变量非常有限。这是由于 的旧攻击cron利用了上述变量。这意味着PATH变量永远不会加载(如上错误所示),因此apt-get upgrade无法运行依赖于 的一些命令。可以通过PATH在 中手动设置来解决这个问题cron

还有一些其他错误与需要debconf控制 tty 有关。这不会阻止命令运行,但可以通过设置DEBIAN_FRONTEND环境变量来抑制这些错误cron

以下是它的全部荣耀:

PATH=/usr/bin:/bin:/usr/sbin:/sbin
DEBIAN_FRONTEND=noninteractive
@daily apt-get -y upgrade > /var/log/tmp.log 2>&1

答案2

哪些软件包尚未更新?

您确定不想要 吗apt-get dist-upgradelinux-image-*例如,无法使用 更新软件包,apt-get upgrade因为已安装新软件包。新软件包只能使用 进行安装dist-upgrade

相关内容