apt-get アップグレードでサービスを自動的に再起動する

apt-get アップグレードでサービスを自動的に再起動する

サーバーをインストールするための無人スクリプトがあります。スクリプトの先頭に がありますsudo apt-get dist-upgrade --yes。dist アップグレードの最後には、サービスの再起動を求める厄介なユーザー入力画面があります。
ここに画像の説明を入力してください

サービスの再起動を自動的に受け入れたり、この画面を無効にしたりすることは可能ですか? スクリプト全体が壊れてしまいます。また、更新時にサーバーが停止してしまうのではないかと心配です...

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)automatically」を選択すると、needrestartプロンプトにブロックされることなく、次の利点が得られます。

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

答え2

他の人が述べたように、この場合の問題はneedrestart、現在の Ubuntu (具体的には私が使用している 22.04) の apt-get アップグレード プロセスの一部であるコマンドにあります。デフォルトでは、これは「インタラクティブ」モードに設定されており、スクリプトが中断されます。

この動作を変更するには、/etc/needrestart/needrestart.confファイルを編集して次の行を変更します。

#$nrconf{restart} = 'i';

$nrconf{restart} = 'a';(サービスを自動的に再起動する場合)、または $nrconf{restart} = 'l';再起動が必要なサービスを単純​​にリストします。

sedスクリプトを実行していて、vim のような対話型エディターを使用せずにこの編集を行う場合は、次のように を使用できます。

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動作しなかったようです。

関連情報