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?


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


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

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.