RedHat:如何在不重新启动的情况下更新 systemd 和 dbus?

RedHat:如何在不重新启动的情况下更新 systemd 和 dbus?

这个问题是关于RedHat 7/8/9 的。

应用大多数更新后,重新启动受影响的服务就足够了。

RedHat 提供了跟踪器工具来准确识别需要重新启动的内容。它产生类似于以下内容的输出:

You should restart:
  * Some applications using:
      systemctl restart chronyd
      systemctl restart firewalld
      systemctl restart mariadb
      systemctl restart polkit
      systemctl restart postfix
      systemctl restart rngd
      systemctl restart rsyslog
      systemctl restart sshd
      systemctl restart sssd
      systemctl restart systemd-journald
      systemctl restart systemd-logind
      systemctl restart systemd-udevd
      systemctl restart tuned
      systemctl restart vmtoolsd

  * These applications rebooting your computer:
      dbus
      kernel
      systemd

我的理解是,只有内核更新(没有 ksplice)才需要重新启动。

如何在不重新启动的情况下重新启动 systemd 和 dbus?

我已经尝试过了

systemctl 守护进程重新执行

重新启动 PID-1 进程。

但在 tracer -a 之后仍然报告 systemd“需要重新启动计算机”。

对于 dbus,我什至不知道从哪里开始寻找。

答案1

systemctl daemon-reexec是重新启动systemd的命令。但请记住,PID 1 并不是 systemd 的唯一实例 - 每个具有交互式登录会话的用户也有自己的每用户实例,他们可以使用 重新启动该实例systemctl --user daemon-reexec。 (这些实例被管理为user@*.service;相关术语:“linger”。)

确实如此技术上dbus-daemon 无需重新启动即可重新启动,因为它只是一个用户空间服务,由 systemd 作为 进行管理dbus.service。但实际上,并不真正建议这样做,因为这样做可能会导致许多其他服务由于失去与其 IPC 总线的连接而意外退出。

保持旧版本的 dbus-daemon 运行通常是安全的,因为它不会动态加载任何其他库或模块(它需要的所有内容都由 ld.so 在启动时加载)。相比之下,httpd动态加载模块,这就是它在这些情况下崩溃的原因。

答案2

这通常应该是一条评论,用于详细说明 @user1686 的出色答案。我将其作为一个完整的答案,以便能够从 URL 复制一些相关注释。

看到@user1686的回答后,我还发现了这个:https://access.redhat.com/solutions/27943

这是需要重新启动的软件包的完整列表(可能会发生变化)。该列表适用于 RHEL 5/6/7,但在 RHEL 8 和 9 中可能类似。

kernel
kernel-PAE
kernel-rt
kernel-smp
kernel-xen
linux-firmware
*-firmware-*
dbus
glibc
hal
systemd
udev
gnutls
openssl-libs

还:

这并不意味着严格要求在更新这些软件包后立即重新启动系统。

通常,在应用非安全 glibc 勘误后重新启动服务就足够了

该文章提供了更多详细信息,这些详细信息都相当于“您应该重新启动任何依赖于已更新内容的服务”。当然,这几乎是每一项服务。

因此:如果内核未更新,您确实可以避免重新启动,但您将不得不重新启动几乎所有服务。

还可以在 RHEL 7.7 及更高版本、8.1 及更高版本以及 RHEL 9 中使用 kpatch 来更新内核本身,而无需重新启动。

详细信息在这里:https://www.redhat.com/sysadmin/kernel-live-patching-linux

RHEL 7、RHEL 8 和 RHEL 9 的说明有所不同。对于 RHEL 8 和 9:

dnf install kpatch kpatch-dnf
dnf kpatch auto

相关内容