Я пытаюсь понять, как происходит автоматическое обновление с помощью пакета unattended-upgrades. Ниже описано то, что я нашел в новой версии Ubuntu 16.04.3.
/etc/cron.daily/apt-compat
имеет строку exec /usr/lib/apt/apt.systemd.daily
в конце, которая выполняет сценарий apt.systemd.daily
.
systemd также выполняет /usr/lib/apt/apt.systemd.daily
и использует таймер. Определение службы systemd, выполняющей обновление, можно найти в /lib/systemd/system/apt-daily.service
. Он вызывает скрипт apt.systemd.daily
с аргументом update
, а определение службы systemd в /lib/systemd/system/apt-daily-upgrade.service
вызывает тот же скрипт с аргументом install
.
Как я понимаю, /usr/lib/apt/apt.systemd.daily
- это скрипт, используемый пакетом unattended-upgrades для автоматического обновления. Я хотел бы знать, почему и cron, и systemd выполняют его?
Эти два задания являются бесплатными, и их связь описана в задании cron (16.04 и новее):
# Systemd systems use a systemd timer unit which is preferable to
# run. We want to randomize the apt update and unattended-upgrade
# runs as much as possible to avoid hitting the mirrors all at the
# same time. The systemd time is better at this than the fixed
# cron.daily time
В Ubuntu 16.04 и более новых системах таймер systemd является важной задачей. Это делает всю тяжелую работу. Устаревший cronjob просто запускает системный таймер на случай, если по какой-то причине он был остановлен.
В Ubuntu 14.04 и более старых системах (не-Systemd) система работает совершенно иначе: cronjob запускает запуск автоматических обновлений.