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

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

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

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

并将其放入 的rootcrontab 列表中。不幸的是,它总是挂在升级部分,询问我是否确定要升级。因为这是一个 cron 作业,所以我看不到输出,直到它通过电子邮件告诉我它失败了。有没有办法让它跳过该提示,而自动进行升级?

答案1

使用 apt-get 的 -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 环境变量

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

答案2

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

sudo apt-get install unattended-upgrades

man unattended-upgrades

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

答案3

虽然前面的答案提供了丰富的信息,但它们并没有回避 期间人类手段所需的输入问题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有关这些参数的深入信息。

重要的提示: 呼叫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!

信用归于雷米·范·埃尔斯特!谢谢!

答案4

感谢 @diegocn 在 a 中的帖子GitHub问题,我发现这个命令可以禁用交互性:

echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections

debconf-set-selections可用于在 debconf 数据库中预先添加答案,或更改数据库中的答案。每个问题都会被标记为可见,以防止 debconf 交互式地询问问题。

警告

仅使用此命令为将要安装或已安装的软件包植入 debconf 值。否则,您最终可能会在数据库中得到已卸载软件包的值,这些值不会消失,或者会出现涉及共享值的更严重的问题。建议仅在原始计算机具有相同安装的情况下才将其用于为数据库做种。

debconf-set-selections.的 Debian 联机帮助页

相关内容