Aktualisieren und aktualisieren Sie apt-get automatisch und unbeaufsichtigt


28

Ich habe ungefähr 7 Debian-Server, die ich verwalte, und ich möchte sie so einstellen, dass sie sich automatisch aktualisieren. Also habe ich ein Skript als solches erstellt:

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

und auf die rootCrontab-Liste des Benutzers gesetzt. Leider hängt es immer im Bereich "Upgrade" und fragt, ob ich wirklich ein Upgrade durchführen möchte. Da es sich um einen Cron-Job handelt, wird die Ausgabe erst angezeigt, wenn ich eine E-Mail mit dem Hinweis erhalten habe, dass der Vorgang fehlgeschlagen ist. Gibt es eine Möglichkeit, diese Eingabeaufforderung zu überspringen und das Upgrade automatisch durchzuführen?


3
... oder Cron-Apt.
Derobert

Antworten:


46

Verwenden Sie die Option -y, um apt-get zu verwenden und nicht danach zu fragen. Von 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.

Sie können auch die env-Variable DEBIAN_FRONTEND festlegen

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
Was macht DEBIAN_FRONTENDdas? Wird es auch für andere Prozesse verwendet?
Canadian Luke REINSTATE MONICA

Ich versuche dies auf meinem
Heimserver

1
@CanadianLuke siehe hier für DEBIAN_FRONTEND. Es wird in meinem Debian man debconfallerdings nicht erwähnt , es könnte also eine Ubuntu-Sache sein.
terdon

@terdon Sie haben nicht das -doc-Paket für Debconf. Es ist in der 7. Abteilung des Mannes man 7 debconf;)
Braiam

@Braiam ah, OK, ich habe das gesehen und versucht, man 7 debconfaber nichts bekommen. Jetzt weiß ich warum :)
terdon

27

Vielleicht verwenden Sie das falsche Werkzeug. unattended-upgradesPaket installiert Sicherheitsupdates täglich (konfigurierbar), Sie können konfigurieren, welche Pakete aktualisiert werden sollen oder nicht usw. Kann installiert werden mit:

sudo apt-get install unattended-upgrades

Von man unattended-upgrades:

Die Konfiguration erfolgt über den apt-Konfigurationsmechanismus. Die Standardkonfigurationsdatei finden Sie unter /etc/apt/apt.conf.d/50unattended-upgrades


@CanadianLuke liest alle Konfigurationen ein, /etc/apt/apt.conf.d/aber nur die, die mit beginnen Unattended-Upgrade::, werden analysiert.
Braiam

Ich versuche dies auf einem der Server bei der Arbeit und werde die beste Antwort auswählen, sobald sie ausgeführt wird
Kanadier Luke REINSTATE MONICA

10

Die vorherigen Antworten sind zwar informativ, umgehen jedoch nicht das „Problem“ der Eingaben, die mit menschlichen Mitteln während des Vorgangs erforderlich sind upgrade. Daher verwende ich die folgenden:

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

Verwenden Sie den dist-upgradeBefehl , um 'Distributions'-Upgrades wie Kernel einzuschließen.

Ausführliche Informationen zu diesen Parametern finden Sie im Handbuch vondpkg .

Wichtiger Hinweis : Der Aufruf sudomit dem -EParameter ist erforderlich:

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.

Andernfalls haben die EXPORTAnweisungen keinen Einfluss auf die Aufrufe von apt-get!

Dank geht an Remy van Elst ! Vielen Dank!


1
Können Sie erklären, warum Sie die anderen Optionen zu apt-get upgrade hinzugefügt haben?
FarO

1
Wird "sudo -E" benötigt, wenn das Skript von Rott's Crontab ausgeführt wird?
FarO

1
@FarO Das hängt davon ab, in welcher Umgebung / in welchem ​​Kontext der Cronjob ausgeführt werden soll. In der Regel werden diese von ausgeführt root- Sie müssen sie also überhaupt nicht verwenden sudo. Die anderen Optionen sind auf jeden Fall so eingestellt, dass sie unbeaufsichtigt ausgeführt werden. Bitte beachten Sie die referenzierte manSeite.
Jitter

4

Ein generisches Tool für diese Art von Dingen ist yes:

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

Das könnten Sie zum Beispiel tun

yes | sudo apt-get upgrade 

Bitte beachten Sie, dass im speziellen Fall apt-get upgradedie von @Braiam oder @ArthurUlfeldt vorgeschlagenen Optionen besser sind.


Die Zeile, die ich einfüge, wenn ich es manuell tun möchte, ist apt-get update && yes | apt-get upgrade(unsere Server sollten nicht verwenden sudo... Fragen Sie nicht ...)
Kanadier Luke REINSTATE MONICA

Warum einen Trick anstelle einer bereits bereitgestellten Option verwenden? "-y" ist bereits in apt-get.
FarO

3
Weil, wie ich in der Antwort sagte, dies ein allgemeines Werkzeug für diese Art von Operation ist, so ist diese Antwort für andere Fälle, nicht für passend. Hast du den letzten Absatz nicht gelesen? Oder der erste Satz?
terdon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.