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
— Нильс Раск
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.