在检查了如何使用 crontab 自动更新后,我以 root 身份编辑了我的,添加了以下行:
00 11 * * * /usr/bin/apt-get upgrade -q -y >> /var/log/apt-upgrade.log
现在,如果我在几分钟后手动运行 apt-get Upgrade,它将显示它没有安装任何升级。该日志根本不报告任何错误,也不报告警告。这只是一个普通的列表
Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
binutils fontconfig fontconfig-config gnupg gpgv libcurl3
libcurl4-openssl-dev libfontconfig1 libgcrypt11 libgcrypt11-dev libgd2-xpm
libidn11 libidn11-dev libperl5.14 libpq5 libsqlite3-0 libssl-dev libssl-doc
libssl1.0.0 libtiff4 linux-image-3.2.0-4-amd64 linux-libc-dev openjdk-7-jre
openjdk-7-jre-headless openssh-client openssh-server openssl perl perl-base
perl-modules ssh
31 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/93.7 MB of archives.
After this operation, 613 kB of additional disk space will be used.
我也尝试过其他事情(显然不是同时进行),但没有结果:
00 11 * * * apt-get upgrade -q -y >> /var/log/apt-upgrade.log
00 11 * * * root /usr/bin/apt-get upgrade -q -y >> /var/log/apt-upgrade.log
00 11 * * * apt-get upgrade -y >> /var/log/apt-upgrade.log
什么也没有发生,实际上没有安装任何升级。我究竟做错了什么?
答案1
你需要设置DEBIAN_FRONTEND=noninteractive
.我似乎记得它有点难找到,因为它实际上是 的一个选项debconf
,而不是apt-get
。但是,提到了例如这里,当然在手册中debconf
。
因此,制作一个包含以下内容的脚本
#/bin/sh
DEBIAN_FRONTEND=noninteractive apt-get upgrade -q -y
并从 cron 运行它。并记得也要跑步apt-get update
。
当然也许你应该使用unattended-upgrades
或者专门为此设计的东西。
但我有一台 Debian 机器使用这个脚本,它工作正常:
#/bin/sh
apt-get -q -q update
if apt-get -s upgrade | grep -q "0 upgraded" ; then
true
else
DEBIAN_FRONTEND=noninteractive apt-get -y -q upgrade
fi
第一个apt-get -s
是抑制输出和无用的电子邮件,以防没有任何内容可以升级。
相似的问题在阿斯库本图。