Я пытаюсь понять, как происходит автоматическое обновление через пакет 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 выполняют его?
решение1
Эти две задачи являются взаимодополняющими, и их взаимосвязь описана в задании 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 просто запускает таймер systemd, если по какой-то причине он был остановлен.
В Ubuntu 14.04 и более старых системах (не Systemd) система работает совершенно иначе: задание cron запускает запуск автоматических обновлений.