Включено ли и когда сработает
Оба значения "1" и оба таймера enabled — обновления идут раз в сутки.
Служба Ubuntu: раз в сутки по таймеру apt ставит обновления из разрешённых источников, по умолчанию — только security.
systemctl list-timers 'apt-daily*'
когда следующий запуск
cat /etc/apt/apt.conf.d/20auto-upgrades
включены ли
apt-config dump | grep -E '^APT::Periodic|^Unattended-Upgrade::'
sudo unattended-upgrade --dry-run -v
что поставил бы сейчас
sudo ls /var/log/unattended-upgrades/
журналы запусков
sudo needrestart -b
кому нужен перезапуск
ls /var/run/reboot-required
нужна ли перезагрузка
unattended-upgrades ставит обновления без человека. Запускают его таймеры apt:
| Шаг | Таймер → служба | Что делает |
|---|---|---|
| 1 | apt-daily.timer → apt-daily.service |
раз в сутки обновляет списки пакетов, как apt update |
| 2 | apt-daily-upgrade.timer → apt-daily-upgrade.service |
в 6:00 плюс до 60 минут случайно запускает unattended-upgrade |
| 3 | хук DPkg::Post-Invoke в 99needrestart |
после установки перезапускает службы со старыми файлами |
Persistent=true — если машина была выключена в 6:00, запуск пройдёт
после загрузки. Служба unattended-upgrades.service («Unattended Upgrades
Shutdown») обновления не ставит: она ждёт выключения машины, чтобы не
оборвать начатую установку.
Шаги 1 и 2 включает файл 20auto-upgrades, число — интервал в днях:
На учебной машине (unattended-upgrades 2.9.1) 20auto-upgrades включает оба
шага, но таймеры и служба выключены (disabled), а сети нет. В старых
списках пакетов полторы сотни обновлений, больше сотни из них — из
noble-security, и пробный запуск падает на скачивании:
Первая строка — про версию в разработке, к серверу на LTS она отношения не имеет. Пробный запуск идёт около минуты: программа разбирает все кандидаты.
Источники — список Allowed-Origins в 50unattended-upgrades. Пакет
ставится, если его источник (o= — кто выпустил, a= — ветка архива)
совпал с одной из строк:
${distro_id}:${distro_codename} — сам выпуск noble, он после выхода не
меняется. Строка -updates в файле закомментирована, поэтому по умолчанию
приходят только обновления безопасности. Ветки ESM работают при
подключённой подписке Ubuntu Pro.
Обновление меняет файлы на диске. Работающая программа продолжает
выполнять старые: её файл удалён, но открыт, как
удалённый открытый файл. Пока служба не
перезапущена, исправление на неё не действует. Бинарь demo-sleep
заменили новым, служба demo-old работает дальше:
Так же остаётся в памяти старая общая
библиотека — с пометкой (deleted) в /proc/<PID>/maps (см.
proc-filesystem). После systemctl restart demo-old процесс
запускается с нового файла, и пометка пропадает.
Ядро перезапуском служб не обновить. Пакет, которому нужна перезагрузка,
создаёт файл /var/run/reboot-required; сама машина перезагрузится, только
если включён Automatic-Reboot.
needrestart находит процессы со старыми файлами и называет их службы.
Режим задаёт -r: l — только список, a — перезапустить, i —
спросить. -b печатает строки для скриптов:
KCUR — работающее ядро, KEXP — новейшее установленное, KSTA: 1 —
они совпадают, перезагрузка не нужна. SVC — служба для перезапуска.
В Ubuntu needrestart вызывается хуком apt после каждой установки и по
умолчанию перезапускает службы сам — так сказано в
/etc/needrestart/needrestart.conf:
Часть служб он не трогает даже в режиме a: их список — ключ
$nrconf{override_rc}. Такие службы попадают в отдельный список:
Здесь demo-lib отложена строкой в /etc/needrestart/conf.d/demo.conf:
Отложенную службу перезапускают руками, когда это безопасно.
Каталог /var/log/unattended-upgrades/ читают root и группа adm:
| Файл | Что в нём |
|---|---|
unattended-upgrades.log |
какие пакеты поставлены и почему другие пропущены |
unattended-upgrades-dpkg.log |
вывод dpkg при установке |
unattended-upgrades-shutdown.log |
работа службы при выключении |
На учебной машине каталог пуст: обновление ни разу не запускалось, а служба
unattended-upgrades.service выключена. Запуски таймера видно в
journalctl -u apt-daily-upgrade.
Настройки — в формате apt в /etc/apt/apt.conf.d/. Файлы читаются по
алфавиту: 20auto-upgrades — включатель, 50unattended-upgrades — что и
как ставить. Свои значения удобно держать в отдельном файле с номером
больше 50: обновление пакета может предложить заменить
50unattended-upgrades, а свой файл оно не тронет.
Строка-значение из позднего файла заменяет прежнее, а элементы списка
{ … } добавляются к прежним. Итог видно в apt-config dump:
Главные ключи — в таблице директив ниже. В 50unattended-upgrades машины
закомментированы Automatic-Reboot "false", Remove-Unused-Dependencies
"false" и Mail "" — это и есть значения по умолчанию.
| Директива | Что делает | Пример |
|---|---|---|
APT::Periodic::Update-Package-Lists 20auto-upgrades |
Раз во сколько дней обновлять списки пакетов; 0 — не обновлять. | APT::Periodic::Update-Package-Lists "1"; |
APT::Periodic::Unattended-Upgrade 20auto-upgrades |
Раз во сколько дней запускать unattended-upgrade; 0 — автообновлений нет. | APT::Periodic::Unattended-Upgrade "1"; |
Unattended-Upgrade::Allowed-Origins 50unattended-upgrades |
Список источников «выпуск:ветка», из которых можно ставить пакеты; по умолчанию — только -security. | Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; }; |
Unattended-Upgrade::Package-Blacklist 50unattended-upgrades |
Пакеты, которые не обновлять; имена — регулярные выражения. | Unattended-Upgrade::Package-Blacklist { "postgresql-"; }; |
Unattended-Upgrade::Automatic-Reboot 50unattended-upgrades |
Перезагрузить машину, если обновлению она нужна (есть /var/run/reboot-required). | Unattended-Upgrade::Automatic-Reboot "true"; |
Unattended-Upgrade::Automatic-Reboot-Time 50unattended-upgrades |
Время перезагрузки вместо «сразу после обновления». | Unattended-Upgrade::Automatic-Reboot-Time "03:30"; |
Unattended-Upgrade::Remove-Unused-Dependencies 50unattended-upgrades |
Удалять зависимости, которые стали не нужны, как apt autoremove. | Unattended-Upgrade::Remove-Unused-Dependencies "true"; |
Unattended-Upgrade::Mail 50unattended-upgrades |
Адрес для отчёта о запуске; нужна работающая отправка почты на машине. | Unattended-Upgrade::Mail "admin@example.org"; |
Ничего не найдено. Попробуй запрос короче.
Оба значения "1" и оба таймера enabled — обновления идут раз в сутки.
Имена — регулярные выражения: postgresql- ловит все пакеты с этим
началом. Проверка — sudo unattended-upgrade --dry-run -v: в строке
Initial blacklist: появятся эти имена.
20auto-upgrades стоит "0" или файла нет.systemctl is-enabled apt-daily-upgrade.timer.failed to download, aborting.Allowed-Origins или в Package-Blacklist.Причину пропуска пакета пишет unattended-upgrades.log и --dry-run -v.
apt пишет Could not get lock /var/lib/dpkg/lock-frontend. It is held by
process … (unattended-upgr). Идёт плановая установка. Дождись её —
systemctl status apt-daily-upgrade. Процесс dpkg, убитый посреди
установки, оставляет пакеты недоустановленными.
Служба работает со старой копией файла: (deleted) в
/proc/<PID>/maps, строка в lsof +L1, служба в needrestart -r l.
Перезапусти её. Обновлено ядро — нужна перезагрузка: есть
/var/run/reboot-required, uname -r старше установленного ядра.
Её перезапустил needrestart после планового обновления. Время совпадает
с запуском apt-daily-upgrade, пакеты — в
unattended-upgrades-dpkg.log. Исключить службу можно в
/etc/needrestart/conf.d/*.conf, ключ $nrconf{override_rc}.
Без Automatic-Reboot-Time машина перезагрузится сразу после обновления,
которому нужна перезагрузка, — посреди рабочего дня. Ставь время окна
обслуживания.
Обновления безопасности меняют мало и редко ломают. Ветка -updates и
сторонние репозитории приносят новые версии, и они встанут ночью без
проверки. Такие источники обновляй руками.
apt-daily*.lsof +L1 и удалённые открытые файлы./proc/<PID>/maps и exe.Есть неточность? Сообщить об ошибке в статье