Ubuntu 16.04: Aktualizacje nienadzorowane są uruchamiane losowo

15

Skonfigurowałem aktualizacje nienadzorowane, aby instalować pakiety bezpieczeństwa i powiadamiać o tym pocztą.

Zauważyłem, że instalacja odbywa się w bardzo przypadkowych momentach. Wiem, że najnowsze wersje dodawały losowe opóźnienie do 30 minut, licząc od czasu wykonania cron.daily.

Jednak opóźnienia, których doświadczam, są znacznie większe. Widzę aktualizacje nienadzorowane wykonywane o 9 rano, 3 po południu, 12 rano ... Dzienniki pokazują to samo, więc nie tylko dostarczanie wiadomości e-mail trwa dłużej.

Zadanie nienadzorowanej aktualizacji jest pierwszym zadaniem w cron.daily, co oznacza, że ​​nie ma wcześniejszego zadania z ogromnymi czasami wykonania.

Czy ktoś doświadczył czegoś podobnego?

Daniel F.
źródło
Losowe zachowanie jest celowe - aby wygładzić popyt zamiast milionów systemów wbijających kilka kopii lustrzanych o tej samej porze każdego dnia. Zwykli użytkownicy komputerów stacjonarnych w ogóle nie powinni zauważać tego zachowania. Niektórzy użytkownicy korporacyjni chcą zmienić zachowanie na coś bardziej przewidywalnego iz pewnością są mile widziane.
user535733,
Tak, powód tego wyboru jest jasny. Po prostu takie zachowanie jest nie do przyjęcia dla systemów produkcyjnych. Kiedy zadałem to pytanie, to zachowanie (i poprawka) nie zostało nigdzie udokumentowane
Daniel F.

Odpowiedzi:

20

Po debugowaniu znalazłem rozwiązanie.

Główna przyczyna tego problemu polega na tym, że w Ubuntu 16.04 i nowszych aktualizacjach nienadzorowanych używa systemd - nie cron - do planowania aktualizacji z ogromnym losowym opóźnieniem:

/lib/systemd/system/apt-daily.timer jest skonfigurowany z

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

Oznacza to, że będzie działać dwa razy dziennie, o 6:00 i 18:00, z losowym opóźnieniem do 12 godzin. Ponieważ nie zawsze jest to akceptowalne w środowiskach produkcyjnych, musiałem zastąpić te ustawienia.

Aby utrzymać pliki konfiguracyjne pakietu w nienaruszonym stanie, zdefiniowałem moje zastąpienie w /etc/systemd/system/apt-daily.timer.d/override.conf( Aktualizacja : przeczytaj edycję na dole tej odpowiedzi, aby uzyskać dodatkowe informacje na temat nazwy pliku i lokalizacji, ponieważ wydaje się, że może ulec nieznacznym zmianom).

Tam ustawiłem

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

aby aktualizacje bezobsługowe działały o godzinie 6:00 plus losowe opóźnienie do godziny.

Potem po prostu zrestartowałem licznik czasu systemctl restart apt-daily.timer(w końcu muszę ponownie załadować demona).

Aktualizacje nienadzorowane są teraz ponownie uruchamiane w przewidywalnych czasach!

Edycja : Wydaje się, że w Ubuntu 18.04 sytuacja się nieco zmieniła. Zastąpienie powinno być teraz zapisane /etc/systemd/system/apt-daily-upgrade.timer.d/override.confi wyglądać tak:

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

@PerlDuck wspomniał o sposobie tworzenia pliku zastępowania o właściwej nazwie i lokalizacji w komentarzu poniżej. Zamiast ręcznie utworzyć plik, rozważ uruchomieniesudo systemctl edit apt-daily.timer

Daniel F.
źródło
1
Dlaczego najpierw czyścisz OnCalendar?
jarno
2
Ponieważ w przeciwnym razie DODANO nowy zegar o godzinie 6 rano, pozostawiając również istniejący. Ponieważ chcę, aby aktualizacje nienadzorowane działały TYLKO o godzinie 6, najpierw muszę wyczyścić harmonogram.
Daniel F.
Dodałem „OnBootSec = 5min”, aby umożliwić również uruchamianie po rozruchu, ale to nie działało. (dodał także OnUnitActiveSec = 12h, aby nie był uruchamiany zbyt często.)
jarno
systemd, a raczej systematyczne nastawienie, uderza ponownie. Być może będę musiał przemyśleć aktualizację do Xenial Xerus w produkcji po tym, jak ten klejnot mnie ugryzł.
Joe
2
@ Daniel F. Mam plik apt-daily.timer w / lib / systemd / system /, a także jeden w /etc/systemd/system/timers.target.wants/ Nie mam go jednak w / etc / systemd / system / sama jak ty. Czy wiesz, czy powinienem zamiast tego tworzyć katalog apt-daily.timer.d i plik override.conf w katalogu / lib / systemd / system? Wszystkie porady z wdzięcznością wycofane dzięki.
Purvez
6

Oficjalna dokumentacja debiana na https://wiki.debian.org/UnattendedUpgrades ma obecnie błąd, który wprowadza w błąd wiele osób. Twierdzi, że można zastąpić czas aktualizacji, tworząc plik o nazwie

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

Jednak poprawna ścieżka jest

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
Rolf Wojtech
źródło
2
Niezłe znalezisko. IMHO najbezpieczniej jest używać sudo systemctl edit apt-daily.timer. Spowoduje to otwarcie edytora z poprawnym plikiem rozwijanym.
PerlDuck
2
Dziękuję PerlDuck, edytowałem stronę Wiki Debiana z twoją sugestią
Rolf Wojtech
Uznaliśmy tę odpowiedź za przydatną - i aktualizację strony wiki Debiana!
Anthony Geoghegan
5

Wypróbowałem rozwiązanie Daniela, ale aktualizacja wciąż działała w niewłaściwych momentach. Okazało się, że potrzebne są dwa systemowe przesłonięcia:

Służy do pobierania

/lib/systemd/system/apt-daily.timer - przesłonięcie za pomocą /etc/systemd/system/apt-daily.timer.d/override.conf

Służy do aktualizacji

/lib/systemd/system/apt-daily-upgrade.timer - przesłonięcie za pomocą /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

Niels Rask
źródło
1
W której wersji jesteś? Więc musiałeś zastąpić oba wspomniane liczniki jednocześnie?
Daniel F.
Ubuntu 16.04.4 x64
Niels Rask