Автоматическое обновление ничего не находит при запуске вручную

При запуске вручную, sudo unattended-upgrade не находит ничего для обновления:

No packages found that can be upgraded unattended and no pending auto-removals

Но делать sudo apt update Заранее чудесным образом меняется ситуация:

Packages that will be upgraded: ...
...
All upgrades installed

Конфиг в /etc/apt/apt.conf.d/20auto-upgrades содержит APT::Periodic::Update-Package-Lists "1"; как и должно быть. Предположительно это используется только cron, что может объяснить устаревший список пакетов.

Кроме того, справочная страница для unattended-upgrade говорит:

Этот скрипт является бэкендом для опции APT::Periodic::Unattended-Upgrade и предназначен для запуска из cron (например, через /etc/cron.daily/apt).

Является unattended-upgrades полностью зависит от cronи если так, значит ли это, что его не следует запускать из скрипта?

Изменить: TLDR. Бег unattended-upgrades вне cronв оболочке ничего не обновляет, хотя конфиг выглядит правильно. Видимо, это потому, что отдельный cron задание отвечает за обновление списка пакетов. Это поведение правильно?

2 ответа

Решение

Ответ, кажется, что успешный unattended-upgrade действительно зависит от недавнего обновления списков пакетов (эквивалентно apt update). Это зависит от того, cron (проверять /etc/cron.daily/, /etc/cron.d/) или, скорее всего, systemd таймер (сделать sudo systemctl list-timers).

Этот пакет не будет сам запускать обновление, а также не будет проверять актуальность списков пакетов. Если это не так, он просто напишет в свой журнал, что устанавливать нечего.

Частично правильно

При автоматическом обновлении в 16.04 и более ранних версиях действительно использовался cron для запуска комбинированной службы обновления / обновления.

Однако это изменилось: 18.04 использует системные таймеры вместо cron. Таймеры для обновления и обновления являются независимыми и могут работать много часов друг от друга. Это наиболее вероятная (и ожидаемая) причина появления пакетов чудесным образом - они, вероятно, были загружены / отражены после предыдущего обновления.

Вы можете запустить unattended-upgrades Команда из командной строки оболочки, и она будет выполнять ту же работу, как если бы она запускалась cron (16.04 и старше) или системным таймером (18.04 и новее).

Поскольку все это контролируется systemd, вы можете использовать любой триггер, который хотите запускать ежедневное обновление и обновление - вы не ограничены использованием встроенных таймеров. Вы можете, например, запустить их через 4 минуты после подключения к сети или настроить таймеры для работы в стандартное время во время обеда или по своему усмотрению.

Другие вопросы по тегам