Ubuntu 服务器系统自动更新命令

Ubuntu 服务器系统自动更新命令

正如我们在这里指出的,我们可以通过执行堆积的命令来快速更新 Ubuntu 系统

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade

我的问题是,如何输入参数,使其通过yes在此执行过程中回答所有要求的确认而更加自动化?

答案1

在没有监督的情况下运行软件升级总是存在一些安全风险,但也有好处。


内容


  1. 使用“无人值守升级”包
  2. 使用 cron 和 aptitude
  3. 使用 cron-apt 处理自动更新


使用“无人值守升级”包


如果尚未安装,请安装无人值守升级包

sudo apt-get install unattended-upgrades

要启用它,请执行以下操作:

sudo dpkg-reconfigure -plow unattended-upgrades

(这是一个交互式对话框)它将创建/etc/apt/apt.conf.d/20auto-upgrades以下内容:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

关于这些值的含义的详细信息可以在文件头部找到/etc/cron.daily/apt

笔记:

  1. 当 apt 作业启动时,它将在 0 到 APT::Periodic::RandomSleep 秒之间的随机时间段内休眠。默认值为“1800”,因此脚本将暂停最多 30 分钟(1800 秒),这样镜像服务器就不会因为所有人同时运行更新而崩溃。仅当您使用本地镜像并且不介意负载峰值时才将其设置为 0。请注意,当 apt 作业处于休眠状态时,它将导致其余 cron.daily 作业的执行延迟。

  2. 如果您希望脚本生成更详细的输出设置APT::Periodic::Verbose "1";

  3. 如果您希望脚本在需要时自动重启,您不仅需要将 Unattended-Upgrade::Automatic-Reboot 设置为“true”,还需要安装“update-notifier-common”包。在最小安装中,默认情况下不会安装该包,如果没有它,自动更新程序将永远不会重启,甚至不会告诉您需要手动重启(如果您配置了电子邮件通知)!

/etc/apt/apt.conf.d/50unattended-upgrades

// Automatically upgrade packages from these (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {    
    // ${distro_id} and ${distro_codename} will be automatically expanded
    "${distro_id} stable";
    "${distro_id} ${distro_codename}-security";
    "${distro_id} ${distro_codename}-updates";
//  "${distro_id} ${distro_codename}-proposed-updates";
};

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
//  "vim";
//  "libc6";
//  "libc6-dev";
//  "libc6-i686";
};

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you 
// have a working mail setup on your system. The package 'mailx'
// must be installed or anything that provides /usr/bin/mail.
//Unattended-Upgrade::Mail "root@localhost";

// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

// Automatically reboot *WITHOUT CONFIRMATION* if a 
// the file /var/run/reboot-required is found after the upgrade 
//Unattended-Upgrade::Automatic-Reboot "false";


使用 cron 和 aptitude


安装aptitude

sudo apt-get install aptitude

创建新文件:

sudo nano /etc/cron.weekly/apt-security-updates

将以下文本复制到这个新文件中,保存并退出:

echo "**************" >> /var/log/apt-security-updates
date >> /var/log/apt-security-updates
aptitude update >> /var/log/apt-security-updates
aptitude safe-upgrade -o Aptitude::Delete-Unused=false --assume-yes --target-release `lsb_release -cs`-security >> /var/log/apt-security-updates
echo "Security updates (if any) installed"

最近(自 Ubuntu 7.10 起),aptitude 操作“升级”已被弃用。现在有两种升级方式,一种是安全升级(保守升级,如果更新需要添加或删除依赖项,则不会更新),另一种是完整升级(即使添加或删除其他软件包会影响其他软件包,它也会始终升级,以前称为“dist-upgrade”)。操作现在是“安全升级”或“完整升级”。有关更多详细信息,请参阅 aptitude 手册页(man aptitude)。

完成后,您需要使文件可执行。因此,通过终端输入以下行:

sudo chmod +x /etc/cron.weekly/apt-security-updates

此脚本每周运行一次,安装安全存储库中的所有可用软件包。它还会在 /var/log/apt-security-updates 中生成日志,以备日后出现问题时检查。

此脚本会将信息输出到日志文件,因此为了防止此日志文件变得太大,我们需要确保它被轮换出去。为此,我们将使用 Ubuntu 附带的 logrotate 实用程序。按 Alt+F2 并输入以下命令:

sudo nano /etc/logrotate.d/apt-security-updates

将其粘贴到编辑器中,保存并退出:

/var/log/apt-security-updates {
        rotate 2
        weekly
        size 250k
        compress
        notifempty
}

这将每周轮换一次日志文件 (weekly),如果日志文件大小超过 250kB (size 250k),则压缩旧版本 (compress)。将保留前两个日志文件 (rotate 2),如果文件为空 (notifempty),则不会进行轮换。



使用 cron-apt 处理自动更新


cron-apt是一个通过使用 cron 作业 apt-get 、 aptitude 或 apt-file 来自动更新软件包的程序。

安装aptitude

sudo apt-get install aptitude

安装cron-apt

sudo apt-get install cron-apt

/etc/cron-apt/config可以通过编辑和添加规则来完成配置/etc/cron-apt/action.d/。您可以在中设置的变量 /etc/cron-apt/config记录在配置示例中/usr/share/doc/cron-apt/examples/config

创建了两个文件:

/etc/cron-apt/action.d/0-update
/etc/cron-apt/action.d/3-download

3-download在终端中打开:

sudo nano /etc/cron-apt/action.d/3-download

内容

dist-upgrade -d -y -o APT::Get::Show-Upgraded=true

表示dist-upgrade执行了a,但只下载了包,并没有安装。

如果您想用大锤安装所有内容,请删除“-d”参数。


来源

答案2

你可以做

sudo apt-get -y upgrade

这将假定大多数事情都是肯定的。在某些情况下,如果“是”可能不合适,则命令将中止。

更冒险的选择是

sudo apt-get --force-yes

不建议这样做,因为它可能会对某些会破坏系统的事情说“是”。有关这些选项的更多详细信息,您可以运行命令

man apt-get

相关内容