Ubuntu 16.04: Unbeaufsichtigte Upgrades werden zu zufälligen Zeiten ausgeführt

Ubuntu 16.04: Unbeaufsichtigte Upgrades werden zu zufälligen Zeiten ausgeführt

Ich habe unbeaufsichtigte Upgrades so konfiguriert, dass Sicherheitspakete installiert werden und ich per E-Mail benachrichtigt werde, wenn dies geschieht.

Mir ist aufgefallen, dass die Installation zu sehr zufälligen Zeiten erfolgt. Ich weiß, dass in den neuesten Versionen ab der Ausführungszeit von cron.daily eine zufällige Verzögerung von bis zu 30 Minuten hinzugefügt wurde.

Die Verzögerungen, die ich erlebe, sind jedoch viel größer. Ich sehe unbeaufsichtigte Upgrades, die um 9 Uhr, 15 Uhr, 24 Uhr ausgeführt werden... Die Protokolle zeigen dasselbe, es ist also nicht nur die E-Mail-Zustellung, die länger dauert.

Die unbeaufsichtigte Upgrade-Aufgabe ist die erste in cron.daily. Dies bedeutet, dass es keine vorherige Aufgabe mit enormen Ausführungszeiten gibt.

Hat jemand etwas Ähnliches erlebt?

Antwort1

Nachdem ich das Debuggen durchgeführt hatte, habe ich die Lösung gefunden.

Die Hauptursache dieses Problems liegt darin, dass unter Ubuntu 16.04 und neuer die Funktion „Unattended Upgrades“ systemd (und nicht cron) verwendet, um die Aktualisierungen mit einer enormen, zufälligen Verzögerung zu planen:

/lib/systemd/system/apt-daily.timerist konfiguriert mit

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

Dies bedeutet, dass es zweimal täglich ausgeführt wird, um 6:00 und 18:00 Uhr, mit einer zufälligen Verzögerung von bis zu 12 Stunden. Da dies für Produktionsumgebungen nicht immer akzeptabel ist, musste ich diese Einstellungen überschreiben.

Um die Paketkonfigurationsdateien unberührt zu lassen, habe ich meinen Override definiert in/etc/systemd/system/apt-daily.timer.d/override.conf(Aktualisieren: Bitte lesen Sie die Bearbeitung am Ende dieser Antwort für weitere Informationen zu Dateiname und Speicherort, da sich diese offenbar geringfügig ändern können).

Dort setzte ich

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

um unbeaufsichtigte Upgrades um 6:00 Uhr plus einer zufälligen Verzögerung von bis zu einer Stunde auszuführen.

Dann habe ich den Timer einfach neu gestartet systemctl restart apt-daily.timer(eventuell muss der Daemon neu geladen werden).

Unbeaufsichtigte Updates laufen jetzt wieder zu vorhersehbaren Zeiten!

Bearbeiten: Es scheint, als ob sich für Ubuntu 18.04 einige Dinge geändert haben. Der Override sollte nun gespeichert werden in/etc/systemd/system/apt-daily-upgrade.timer.d/override.confund sehen so aus:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuck hat in einem Kommentar unten eine Möglichkeit erwähnt, eine Override-Datei mit dem richtigen Namen und Speicherort zu erstellen. Anstatt eine Datei manuell zu erstellen, sollten Sie Folgendes ausführen:sudo systemctl edit apt-daily.timer

Antwort2

Der beste Weg, die unbeaufsichtigte Upgrade-Zeit zu aktualisieren, wie ich sie aus verschiedenen Quellen zusammengestellt und auf unserem System getestet habe, istVerwenden Sie ausschließlich die systemctlBefehleund vermeiden Sie den Versuch, die richtigen Dateien zum Bearbeiten zu finden.

Das einzige, was Sie sicher wissen müssen, ist der Name des Dienstes, der in unserem Fall lautet:apt-daily-upgrade(Wenn Sie unsicher sind, suchen Sie über danach $ systemctl | grep apt.) Wenn für einen systemd-Dienst ein Timer definiert ist, wird dieser als referenziert und #{service_name}.timerist daher apt-daily-upgrade.timerfür uns bestimmt.

Da die Systemkonfiguration nicht bearbeitet werden soll, müssen wirüberschreibt die Standard-Timer-Konfigurationin systemd. Dazu müssen Sie einige Teile der Originalkonfiguration kopieren und bearbeiten, also zeigen wir sie zuerst:

$ systemctl cat apt-daily-upgrade.timer 
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

Wir müssen die OnCalendarund RandomizedDelaySecWerte im [Timer]Abschnitt aktualisieren. Lassen Sie uns die Override-Konfigurationsdatei mit dem folgenden Befehl erstellen:

$ systemctl edit apt-daily-upgrade.timer

[Timer]Dies sollte einen Editor mit einer leeren Datei öffnen und wir müssen dort mindestens den geänderten Abschnitt einfügen :

[Timer]
# Reset the system calendar config first
OnCalendar=
# Set a new calendar timer with a 60 minute threshold
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

Wie Sie sehen, haben wir den OnCalendarWert aktualisiert, um die automatischen Updates abends statt morgens auszulösen. Die leere OnCalendarZeile darüber muss vorhanden sein alsdieser Konfigurationswert istZusatzstoff, d. h. es kann mehr als einmal angegeben werden und nur das Setzen eines leeren Werts setzt alle vorherigen OnCalendarWerte (die aus der Systemkonfiguration) zurück.

Nachdem wir die Datei gespeichert haben, können wir überprüfen, ob systemd davon weiß (es ist nicht nötig, sie auszuführen systemctl daemon-reload, das erledigt der editBefehl für uns, wenn wir den Editor verlassen), indem wir sie systemctlwie oben beschrieben noch einmal ausführen:

$ systemctl cat apt-daily-upgrade.timer

# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
# Reset the system calendar config first
OnCalendar=
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

Jetzt werden zwei Konfigurationen angezeigt, wobei unsere benutzerdefinierte Konfiguration die Standardkonfiguration überschreibt. Gut!

Die abschließende Prüfung, ob alles wie erwartet funktioniert, kann mit dem list-timersfolgenden Befehl durchgeführt werden systemctl:

$ systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES                     
...
Thu 2020-08-06 21:51:36 UTC 12h left      Thu 2020-08-06 07:10:20 UTC 2h 20min ago apt-daily-upgrade.timer      apt-daily-upgrade.service               
...             

Suchen Sie in der Ausgabe nach der richtigen Zeile und sehen Sie sich die NEXTSpalte an. Der dort enthaltene Wert sollte den Zeitpunkt Ihres neu konfigurierten unbeaufsichtigten Upgrades widerspiegeln.

Antwort3

Die offizielle Debian-Dokumentation aufhttps://wiki.debian.org/UnattendedUpgradeshat derzeit einen Fehler, der viele Leute in die Irre führt. Es wird behauptet, dass Sie die Upgrade-Zeit überschreiben können, indem Sie eine Datei namens

/etc/systemd/system/apt-daily-upgrade.d/override.conf

Der richtige Weg ist jedoch

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

Antwort4

Derapt-daily.timerist so eingestellt, dass es zweimal täglich ausgeführt wird und eine Produktionsumgebung nicht unterbricht, da es lediglich die Pakete aktualisiert und herunterlädt, die aktualisiert werden müssen. Sie müssen nurapt-daily-upgrade.timerauf eine Zeit, die Ihre Produktionsumgebung weniger beeinträchtigt, da zu dieser Zeit die Updates tatsächlich installiert werden. Außerdem gibt es eine Einstellung zum Neustarten für Dinge, die dies in 50unattended-upgrades erfordern, die Sie in Betracht ziehen sollten, damit sie tatsächlich angewendet werden, und die auch einen Timer hat. Außerdem wurde der Upgrade-Timer ab 22.04 auf die Standardeinstellung 6 Uhr + 1 Stunde geändert, sodass die meisten dies nicht ändern müssen.

verwandte Informationen