Перезапуск systemd без перезагрузки Linux

Всякий раз, когда устанавливается обновление критической бибилотеки библиотеку, к примеру OpenSSL, нам необходимо перезапустить все демоны, которые используют эту библиотеку. Systemd с PID 1 сам также использует OpenSSL. В этой статье представлена инструкция как перезапустить демон systemd другие службы, такие как Nginx, SSHD, Firewalld, не перезагружая Linux.

Linux

Применение обновлений безопасности для systemd и других приложений в Linux

Первым делом установите обновление с помощью вашего менеджера пакетов

apt update && apt upgrade
dnf update
zypper ref && zypper up

Как получить список служб, нуждающихся в перезапуске в Linux и systemd

Когда обновления применены, мы можем проверить, нуждается ли CentOS / RHEL / Fedora в полной перезагрузке и перезапуске служб:

needs-restarting

Мы можем использовать команду needrestart для проверки того, какие демоны необходимо перезапустить после обновления библиотеки в Debian или Ubuntu/Mint Linux:

needrestart

В OpenSUSE/Suse Enterprise Linux мы можем установить пакет lsof и использовать команду zypper ps для получения списка всех таких служб, которые нуждаются в перезапуске

zypper ps

К сожалению, не в каждом дистрибутиве Linux есть инструменты для определения такого состояния. Не бойтесь. Мы можем использовать команду lsof для получения списка всех таких служб.

lsof | grep -i deleted
lsof | grep -i 'lib-name'
lsof | grep libssl

Вот как найти все службы, использующие libssl для перезапуска после обновления OpenSSL, используя комбинацию команд grep, awk и других команд

lsof | grep libssl | awk '{print $1}' | sort | uniq
lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u

Перезапуск служб Linux

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

systemctl restart nginx
systemctl restart firewalld

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

for s in $(sudo needs-restarting -s); do sudo systemctl restart $s; done

Перезапустить systemd с PID 1 без перезагрузки

Выполните следующую команду

systemctl daemon-reexec

И проверьте его снова:

lsof | grep 'DEL.*lib' | cut -f 1 -d ' ' | sort -u

daemon-reexec - Повторное выполнение менеджера systemd. Это приведет к сериализации состояния менеджера, повторному выполнению процесса и повторной десериализации состояния. Эта команда малопригодна, за исключением отладки и обновления пакетов. Иногда она может быть полезна в качестве тяжелой перезагрузки демона. Во время повторного выполнения демона все сокеты, которые systemd прослушивает от имени пользовательской конфигурации, останутся доступными.

Добавить комментарий