使apt-get更新和升级自动化且无人值守


28

我管理着大约7台Debian服务器,我想将它们设置为自动更新。因此,我这样创建了一个脚本:

#!/bin/sh
apt-get update
apt-get upgrade

并将其放在root的crontab列表中。不幸的是,它始终挂在“升级”部分,询问我是否确定要升级。因为这是一项Cron工作,所以直到它通过电子邮件发送给我说失败了之后,我才能看到输出。有没有办法让它跳过该提示,而只是自动进行升级?


3
...或cron-apt。
derobert 2013年

Answers:


46

使用-y选项可以使其不询问。来自man apt-get

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

您还可以设置DEBIAN_FRONTEND env变量

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
怎么DEBIAN_FRONTEND办?它也用于其他过程吗?
加拿大卢克REINSTATE MONICA 2013年

我正在家用服务器上尝试此操作,它将在运行时立即选择最佳答案
Canadian Luke REINSTATE MONICA 2013年

1
@CanadianLuke 在这里查看DEBIAN_FRONTEND。我的Debian中没有提到它man debconf,所以这可能是Ubuntu的事情。
terdon

@terdon您没有用于debconf的-doc软件包。这是男人的第7部分man 7 debconf;)
Braiam 2013年

@Braiam啊,好的,我看到了,尝试man 7 debconf了一下,但一无所获。现在我知道为什么了:)
terdon

27

好吧,也许您使用的是错误的工具。unattended-upgrades软件包每天安装安全升级(可以配置),您可以配置要升级或不升级的软件包等。可以使用以下方式安装:

sudo apt-get install unattended-upgrades

来自man unattended-upgrades

通过apt配置机制完成配置。可以在/etc/apt/apt.conf.d/50unattended-upgrades中找到默认配置文件。


@CanadianLuke读取其中的所有配置,/etc/apt/apt.conf.d/但仅Unattended-Upgrade::解析以开头的配置。
Braiam 2013年

我正在工作中的一台服务器上尝试此操作,它将在运行时立即选择最佳答案
Canadian Luke REINSTATE MONICA 2013年

10

尽管先前的答案是有益的,但它们并未绕过期间人为要求的输入的“问题” upgrade。因此,我正在使用以下内容:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

包括内核在内的“发行版”升级,请使用该dist-upgrade命令。

有关这些参数的详细信息,请参见的手册dpkg

importat note:需要sudo包括-E参数的调用:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

否则,该EXPORT语句将不会影响apt-get!的调用。

归功于Remy van Elst!谢谢!


1
您能解释一下为什么要在apt-get upgrade中添加其他选项吗?
FarO

1
另外,如果脚本是从rott的crontab运行的,是否需要“ sudo -E”?
FarO

1
@FarO取决于您希望cronjob在什么环境/上下文中运行。通常,这些都是由root- 运行的,因此您完全不需要使用sudo。“其他选项”在任何情况下均设置为无人值守运行。请参阅参考man页。
抖动

4

这类工具的通用工具是yes

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

因此,例如,您可以

yes | sudo apt-get upgrade 

请注意,在特定情况下,apt-get upgrade使用@Braiam@ArthurUlfeldt建议的选项更好。


我要手动执行时粘贴的行是apt-get update && yes | apt-get upgrade(我们的服务器不应该使用sudo...不要问...)
加拿大卢克·莱因斯特尼·蒙尼卡

为什么使用技巧而不是已经提供的选项?“ -y”已经在apt-get中了。
FarO

3
因为,正如我在回答中所说,这是用于此类操作的通用工具,因此此答案适用于其他情况,而不适用于apt。您没有阅读最后一段吗?还是第一句话?
terdon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.