Ubuntu 16.04: автоматические обновления запускаются в случайное время

15

Я настроил автоматические обновления для установки пакетов безопасности и уведомления об этом по почте.

Я заметил, что установка происходит в очень случайное время. Я знаю, что в последних версиях добавлена ​​случайная задержка до 30 минут, начиная с времени выполнения cron.daily.

Однако задержки, которые я испытываю, намного больше, чем это. Я вижу, что автоматические обновления выполняются в 9:00, 15:00, 12:00 ... Журналы показывают то же самое, поэтому не только доставка электронной почты занимает больше времени.

Задача автоматического обновления является первой в cron.daily, что означает отсутствие предыдущей задачи с огромным временем выполнения.

Кто-нибудь испытывал подобное?

Даниэль Ф.
источник
Случайное поведение является преднамеренным - сгладить спрос вместо того, чтобы миллионы систем ежедневно отбивали несколько зеркал в одно и то же время. Обычные пользователи рабочего стола вообще не должны замечать такого поведения. Некоторые корпоративные пользователи хотят изменить поведение на более предсказуемое, и, безусловно, могут это сделать.
user535733
Да, причина этого выбора ясна. Просто такое поведение неприемлемо для производственных систем. В то время, когда я задавал этот вопрос, это поведение (и исправление) нигде не было задокументировано
Даниэль Ф.

Ответы:

20

После отладки я нашел решение.

Основная причина этой проблемы заключается в том, что в Ubuntu 16.04 и новее автоматические обновления используют systemd, а не cron, для планирования обновлений с большой случайной задержкой:

/lib/systemd/system/apt-daily.timer настроен с

OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h

Это означает, что он будет работать два раза в день, в 6:00 и 18:00, со случайной задержкой до 12 часов. Поскольку это не всегда приемлемо для производственных сред, мне пришлось переопределить эти настройки.

Чтобы сохранить файлы конфигурации пакета без изменений, я определил свое переопределение в /etc/systemd/system/apt-daily.timer.d/override.conf( Обновление : пожалуйста, прочитайте правку внизу этого ответа для получения дополнительной информации о имени файла и расположении, так как оно может быть слегка изменено).

Там я поставил

[Timer]
OnCalendar=
OnCalendar=06:00
RandomizedDelaySec=1h

запуск автоматических обновлений в 6:00 плюс произвольная задержка до часа.

Затем я просто перезапустил таймер с помощью systemctl restart apt-daily.timer(в конце концов, необходимо перезагрузить демон).

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

Изменить : Казалось бы, для Ubuntu 18.04 все немного изменилось. Переопределение теперь должно быть сохранено /etc/systemd/system/apt-daily-upgrade.timer.d/override.confи выглядеть следующим образом:

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=1h

@PerlDuck упомянул способ создания файла переопределения с правильным именем и расположением в комментарии ниже. Вместо того, чтобы вручную создавать файл, пожалуйста, попробуйте запуститьsudo systemctl edit apt-daily.timer

Даниэль Ф.
источник
1
Почему вы сначала очищаете OnCalendar?
Ярно
2
Потому что в противном случае он только добавит новый таймер в 6 утра, оставив также и существующий. Так как я хочу, чтобы автоматические обновления работали ТОЛЬКО на 6, мне нужно сначала очистить расписание.
Даниель е.
Я добавил «OnBootSec = 5min», чтобы включить запуск и после загрузки, но это не сработало. (также добавлен OnUnitActiveSec = 12h, чтобы он не запускался слишком часто.)
jarno
systemd, или, скорее, системное мышление, поражает снова. Возможно, мне придется переосмыслить процесс обновления до Xenial Xerus после того, как этот камень укусил меня.
Джо
2
@daniel f. У меня есть файл apt-daily.timer в / lib / systemd / system /, а также файл в /etc/systemd/system/timers.target.wants/ Однако у меня его нет в / etc / systemd / system / сам как ты. Знаете ли вы, нужно ли мне вместо этого создавать каталог apt-daily.timer.d и файл override.conf в / lib / systemd / system? Все советы с благодарностью Recd с THX.
Пурвез
5

Официальная документация Debian по адресу https://wiki.debian.org/UnattendedUpgrades в настоящее время содержит ошибку, которая вводит в заблуждение многих людей. Он утверждает, что вы можете переопределить время обновления, создав файл с именем

/etc/systemd/system/apt-daily-upgrade.d/override.conf

Однако правильный путь

/etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
Рольф Войтех
источник
1
Хорошая находка. ИМХО самое безопасное - это использовать sudo systemctl edit apt-daily.timer. Откроется редактор с правильным выпадающим файлом.
PerlDuck
2
Спасибо, PerlDuck, я отредактировал страницу вики Debian с твоим предложением
Рольф Войтех,
Подтвердил этот ответ как полезный - и за обновление вики-страницы Debian!
Энтони Геогеган
5

Я испробовал решение Даниэля, но обновление все равно было запущено не в то время. Выяснилось, что нужны две системные замены:

Используется для загрузки

/lib/systemd/system/apt-daily.timer - переопределить с помощью /etc/systemd/system/apt-daily.timer.d/override.conf

Используется для обновления

/lib/systemd/system/apt-daily-upgrade.timer - переопределить с помощью /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf

Нильс Раск
источник
1
На какой версии вы находитесь? То есть вам пришлось переопределить оба упомянутых таймера одновременно?
Даниель е.
Ubuntu 16.04.4 x64
Нильс Раск