apt-get 升级自动重启服务

apt-get 升级自动重启服务

我有一个用于安装服务器的无人值守脚本。脚本的开头有一个sudo apt-get dist-upgrade --yes。dist upgrade 在其末尾有一个令人讨厌的用户输入屏幕,要求重新启动服务:
在此处输入图片描述

是否可以自动接受服务重启或禁用此屏幕?这会破坏我的整个脚本。此外,我担心在更新时我的服务器可能会卡住...

使用 apt-get upgrade 得到同样的结果

编辑:我尝试过但没有成功:

#!/bin/bash
sudo apt-get update
sudo apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
sudo apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
sudo apt-get --force-yes clean &&

echo "executing update" &&
sudo apt-get update &&

echo "executing upgrade" &&
sudo apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuyq upgrade &&

echo "executing dist-upgrade" &&
sudo apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuyq dist-upgrade

答案1

其他答案则直接跳过needrestart

但是环境变量NEEDRESTART_MODE允许指定一种模式。通过选择“(a)自动”,您可以受益,needrestart而不会被提示阻止:

sudo NEEDRESTART_MODE=a apt-get dist-upgrade --yes

答案2

正如其他人提到的,这种情况的问题在于命令needrestart,它是现在 Ubuntu 中 apt-get 升级过程的一部分(特别是我正在使用的 22.04)。默认情况下,它设置为“交互”模式,这会导致脚本中断。

为了改变这种行为,我们可以编辑该/etc/needrestart/needrestart.conf文件,更改以下行:

#$nrconf{restart} = 'i';

$nrconf{restart} = 'a';(如果我们想自动重启服务)或者 $nrconf{restart} = 'l';简单列出需要重启的服务。

如果你正在运行脚本并且不想使用 vim 等交互式编辑器来进行编辑,你可以使用以下命令进行编辑sed,例如:

sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf

由于配置文件中的单引号以及 sed 处理单引号的方式,它看起来很丑陋,但它确实有效。如果您有更好的方法,请发表评论。

答案3

不要使用 sed 或编辑主配置,而是在 /etc/needrestart/conf.d/no-prompt.conf 中添加您自己的配置文件:

$nrconf{restart} = 'a';

答案4

或者,我思考你可以删除needrestart包本身。

sudo apt-get remove needrestart

我在 Ubuntu 22.04 上使用它来配置 AWS EC2。无论出于什么原因,export DEBIAN_FRONTEND=noninteractive它似乎不起作用。

相关内容