
Ich habe ein unbeaufsichtigtes Skript zum Installieren von Servern. Am Anfang des Skripts steht ein sudo apt-get dist-upgrade --yes
. Das dist-Upgrade hat am Ende einen unangenehmen Benutzereingabebildschirm, der zum Neustart der Dienste auffordert:
Ist es möglich, Neustarts des Dienstes automatisch zu akzeptieren oder diesen Bildschirm zu deaktivieren? Es macht mein ganzes Skript kaputt. Außerdem befürchte ich, dass mein Server beim Aktualisieren irgendwann hängen bleiben könnte ...
gleiches Ergebnis mit apt-get upgrade
edit: Ich habe es erfolglos versucht:
#!/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
Antwort1
Andere Antworten wurden einfach needrestart
komplett übersprungen.
Aber die UmgebungsvariableNEEDRESTART_MODE
ermöglicht die Angabe eines Modus. Und wenn Sie „(a)utomatisch“ wählen, können Sie davon profitieren, needrestart
ohne durch die Eingabeaufforderung blockiert zu werden:
sudo NEEDRESTART_MODE=a apt-get dist-upgrade --yes
Antwort2
Wie andere bereits erwähnt haben, liegt das Problem in diesem Fall beim needrestart
Befehl, der jetzt Teil des apt-get-Upgrade-Prozesses in Ubuntu ist (insbesondere 22.04, das ich verwende). Standardmäßig ist dies auf den „interaktiven“ Modus eingestellt, was zur Unterbrechung von Skripten führt.
Um dieses Verhalten zu ändern, können wir die /etc/needrestart/needrestart.conf
Datei bearbeiten und die Zeile ändern:
#$nrconf{restart} = 'i';
Zu
$nrconf{restart} = 'a';
(wenn wir die Dienste automatisch neu starten möchten) oder
$nrconf{restart} = 'l';
einfach die Dienste auflisten, die neu gestartet werden müssen.
Wenn Sie ein Skript ausführen und diese Bearbeitung ohne Verwendung eines interaktiven Editors wie vim vornehmen möchten, können Sie dies mit sed
etwa folgendem Befehl tun:
sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf
Es sieht aufgrund der einfachen Anführungszeichen in der Konfigurationsdatei und der Art und Weise, wie sed einfache Anführungszeichen verarbeitet, hässlich aus, aber es funktioniert. Bitte hinterlassen Sie einen Kommentar, wenn Sie einen besser aussehenden Ansatz haben.
Antwort3
Anstatt sed zu verwenden oder die Hauptkonfiguration zu bearbeiten, fügen Sie Ihre eigene Konfigurationsdatei in /etc/needrestart/conf.d/no-prompt.conf hinzu:
$nrconf{restart} = 'a';
Antwort4
Alternativ kann ichdenkenSie können dieneedrestart
Paket selbst.
sudo apt-get remove needrestart
Ich verwende dies für die Bereitstellung von AWS EC2 unter Ubuntu 22.04. Aus irgendeinem Grund export DEBIAN_FRONTEND=noninteractive
schien es nicht zu funktionieren.