Вопрос или проблема
Я пробовал найти прямой ответ на этот вопрос, но не могу его нигде найти. Автоматические обновления для исправлений безопасности перезапускают сервисы автоматически? Если да, есть ли способ предотвратить это для некоторых пакетов, где это может быть очень разрушительно, например для postgresql? И есть ли в логах, где можно увидеть, когда последний раз был перезапущен сервис?
Чтобы ответить на этот вопрос, сначала важно уточнить, что unattended-upgrades — это служба, которая в основном выполняет «apt upgrade» автоматически от вашего имени. Если вы когда-либо обновляли пакет, вы заметите, что многие из них вызывают действия в рамках этого процесса; например, если вы обновляете rsync, вы заметите, что демон перезапускается:
Настройка rsync (3.1.0-2ubuntu0.2) ...
* Перезапуск демона rsync [ OK ]
Как правило, хорошо написанные пакеты для debian, которые содержат демоны (другими словами, работающие сервисы), будут перезапускать эти демоны в рамках обновления; если этого не происходит для пакета, который вам важен, сообщите об ошибке (и если можете, предложите исправление).
Есть важный случай, когда этого не происходит: когда вместо обновления самого сервиса вы обновляете системный пакет, от которого он зависит. Один пример, который приходит на ум, это openssl, который используется многими сервисами, реализующими поддержку SSL. Для них требуется ручной перезапуск сервиса, и если вы не знаете, сколько или какие из них нужно перезапустить, перезагрузка решает проблему.
Чтобы избежать обновления определенных пакетов, добавьте пакеты в конфигурацию Unattended-Upgrade::Package-Blacklist; смотрите ответ на Можно ли настроить автоматические обновления, чтобы не обновлять пакеты, требующие перезагрузки? для примера синтаксиса.
Наконец, по теме обновлений, стоит упомянуть о службе canonical-livepatch, которая предоставляет бесплатные, автоматические, живые обновления для критически важных исправлений безопасности ядра. Если вы еще не ознакомились с ней, вам стоит это сделать.
Ответ для LTS 22 и 24 таков: зависит от вашей конфигурации needrestart
.
Вы можете самостоятельно выполнить эту команду:
needrestart --help
И она интегрирована в apt
, и, конечно, работает с unattended-upgrades
.
Смотрите документацию upstream для получения дополнительных деталей.
Приведу пример.
У меня есть что-то под названием keter.service
, и я настроил исключение для него, чтобы он не перезапускался автоматически при обновлениях libc. Исключение работает следующим образом:
$ sudo apt upgrade
[...]
Обработка триггеров для libc-bin (2.39-0ubuntu8.3) ...
Сканирование процессов...
Сканирование кандидатов...
Сканирование образов linux...
Ожидающее обновление ядра!
Запущенная версия ядра:
6.8.0-1014-aws
Диагностика:
Запущенная версия ядра не соответствует ожидаемой версии ядра 6.8.0-1017-aws.
Перезапуск системы для загрузки нового ядра не будет обработан автоматически, поэтому вам следует рассмотреть возможность перезагрузки.
Перезапуск сервисов...
systemctl restart acpid.service atop.service atopacct.service chrony.service cron.service fwupd.service irqbalance.service multipathd.service pmcd.service pmie.service pmie_farm.service pmlogger.service pmlogger_farm.service pmproxy.service polkit.service rsyslog.service site24x7monagent.service snapd.service ssh.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-udevd.service udisks2.service
Перезапуски сервисов откладываются:
/etc/needrestart/restart.d/dbus.service
systemctl restart [email protected]
systemctl restart keter.service
systemctl restart networkd-dispatcher.service
systemctl restart [email protected]
systemctl restart systemd-logind.service
systemctl restart unattended-upgrades.service
Нет контейнеров, которые нужно перезапускать.
Пользовательские сессии, работающие с устаревшими бинарниками:
ulidtko @ session #2: tmux: server[4652]
ulidtko @ session #79023: apt[4092243], sshd[4075339,4075629]
ulidtko @ user manager service: bash[4653,4715,4906], systemd[3645]
Нет гостей VM, работающих с устаревшими бинарниками гипервизора (qemu) на этом хосте.
Видите элемент keter.service
в разделе Перезапуски сервисов, которые откладываются
?
Это достигается путем размещения файла конфигурации любой-имя-которое-вы-любите-оканчивающееся-на.conf
в /etc/needrestart/conf.d/
с содержимым:
$nrconf{override_rc} {qr/keter[.]service/} = 0;
Это в синтаксисе Perl и настраивает переопределение для сервиса systemd, который соответствует регулярному выражению.
Ответ или решение
Автоматический перезапуск служб при незапланированных обновлениях
Ответ на вопрос о том, перезапускает ли служба автоматических обновлений (unattended-upgrades) службы при установке обновлений, во многом зависит от конфигурации и особенностей конкретного программного обеспечения.
Как работает unattended-upgrades?
Unattended-upgrades — это служба, которая автоматически устанавливает обновления для пакетов на основе настроек, определенных администратором. При обновлении пакетов, содержащих демоны (службы), обычно происходит автоматический перезапуск этих служб. Например, при обновлении пакета rsync
демон будет перезапущен автоматически.
Setting up rsync (3.1.0-2ubuntu0.2) ...
* Restarting rsync daemon rsync [ OK ]
Однако, важно отметить, что не все обновления требуют перезапуска служб. Например, если вы обновляете системный пакет, от которого зависят другие службы, такие как openssl
, то может потребоваться ручной перезапуск этих служб. В таких случаях, если вы не знаете, какие службы необходимо перезапустить, перезагрузка системы может быть наиболее простым решением.
Как предотвратить автоматический перезапуск служб?
Если вы хотите избежать автоматического перезапуска определённых служб, таких как postgresql
, можно добавить их в черный список (Package-Blacklist) в конфигурационном файле unattended-upgrades. Например:
Unattended-Upgrade::Package-Blacklist {
"postgresql";
};
Это предотвратит обновление данного пакета до момента, когда вы будете готовы перезапустить его вручную.
Использование needrestart
Система needrestart
также может сыграть важную роль в управлении перезапуском служб. needrestart
может быть интегрирован с системными пакетами и управлением обновлениями. Он отслеживает запущенные процессы и предоставляет возможность настроить, какие службы необходимо перезапустить, а какие — нет. Например, можно настроить исключение для конкретного сервиса, чтобы его не перезапускали при обновлении пакетов:
$nrconf{override_rc} {qr/keter[.]service/} = 0;
Эта настройка позволяет вам точно контролировать, какие службы будут перезапущены автоматически.
Логи перезапуска служб
Для отслеживания времени последнего перезапуска служб можно просмотреть логи системного менеджера systemd
. Команда journalctl
позволяет получить информацию о деятельности служб:
journalctl -u имя_сервиса
Следует отметить, что эта команда предоставит вам историю событий, связанных с указанной службой, включая информацию о перезапусках.
Заключение
В общем, unattended-upgrades
может автоматически перезапускать службы, но это поведение зависит от настройки пакетов и конфигурации системы. Вы можете использовать механизмы, такие как черные списки и needrestart
, чтобы управлять перезапуском специфических служб. Важно также регулярно проверять логи для мониторинга последнего перезапуска служб и обеспечения стабильности критически важных приложений.