Ubuntu 16.04: необслуживаемые обновления выполняют наугад времена

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

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

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

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

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

11
задан 14 September 2016 в 01:06

4 ответа

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

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

/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
16
ответ дан 23 November 2019 в 03:57

Официальная 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
2
ответ дан 23 November 2019 в 03:57

Я попробовал решение Daniel, но обновление все еще работало в неправильные времена. Превращенный там два переопределения systemd, которые необходимы:

Используемый для загрузок

/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

2
ответ дан 23 November 2019 в 03:57

Лучший способ обновить время автоматического обновления, как я скомпилировал из различных источников и протестировал в нашей системе, — исключительно использовать команды systemctl и не пытаться найти нужные файлы для редактирования.

Единственное, что вам нужно знать наверняка, это имя сервиса, в нашем случае это apt-daily-upgrade (если вы не уверены, найдите его через $ systemctl | grep apt ). Когда для службы systemd определен таймер, на него ссылаются как #{имя_службы}.timer, поэтому для нас это apt-daily-upgrade.timer.

Поскольку конфигурацию системы изменять не следует, нам придется переопределить конфигурацию таймера по умолчанию в systemd. Для этого вам нужно скопировать и отредактировать некоторые части оригинальной конфигурации, поэтому давайте сначала покажем ее:

$ systemctl cat apt-daily-upgrade.timer 
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

Нам нужно обновить значения OnCalendar и RandomizedDelaySec в [Таймер]. Давайте создадим файл конфигурации переопределения с помощью следующей команды:

$ systemctl edit apt-daily-upgrade.timer

Это должно открыть редактор с пустым файлом, и нам нужно поместить туда измененный раздел [Таймер], по крайней мере:

[Timer]
# Reset the system calendar config first
OnCalendar=
# Set a new calendar timer with a 60 minute threshold
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

Как вы Как видите, мы обновили значение OnCalendar, чтобы запускать автоматические обновления по вечерам, а не по утрам. Пустая строка OnCalendar над ней должна присутствовать, поскольку данное значение конфигурации является аддитивным, т.е. оно может быть указано более одного раза, и только установка его в пустое значение сбрасывает все предыдущие Значения OnCalendar (из конфигурации системы).

Сохранив файл, мы можем убедиться, что systemd знает о нем (нет необходимости запускать systemctl daemon-reload, команда edit сделает это за нас при выходе из editor):

$ systemd cat apt-daily-upgrade.timer
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=12h
Persistent=true

[Install]
WantedBy=timers.target

# /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
# Reset the system calendar config first
OnCalendar=
OnCalendar=*-*-* 21:00
RandomizedDelaySec=60m

Теперь он показывает две конфигурации, причем наша пользовательская переопределяет конфигурацию по умолчанию. Хорошо!

Окончательную проверку того, что все работает должным образом, можно выполнить с помощью команды list-timers команды systemctl:

$ systemctl list-timers
NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES                     
...
Thu 2020-08-06 21:51:36 UTC 12h left      Thu 2020-08-06 07:10:20 UTC 2h 20min ago apt-daily-upgrade.timer      apt-daily-upgrade.service               
...             

Найдите нужную строку в выходных данных и посмотрите на Столбец NEXT — значение в нем должно отражать время только что настроенного автоматического обновления.

5
ответ дан 6 August 2020 в 09:43

Другие вопросы по тегам:

Похожие вопросы: