如何从命令行检查 RHEL 或 CentOS 是否需要重新启动?

Jim*_*ker 61 redhat centos yum rhel5 update

我在几台没有 GUI 的机器上使用 CentOS 和 Red Hat Enterprise Linux。如何检查最近安装的更新是否需要重新启动?在 Ubuntu 中,我习惯于检查是否/var/run/reboot-required存在。

xdd*_*dsg 67

https://access.redhat.com/discussions/3106621#comment-1196821

不要忘记,由于核心库更新,您可能需要重新启动,至少如果它是 glibc。(而且,更新后可能需要重新启动服务)。

如果安装该yum-utils软件包,则可以使用名为needs-restarting.

您可以使用它来检查是否由于内核或核心库更新(使用该-r选项)而需要完全重新启动,或者需要重新启动哪些服务(使用该-s选项)。

needs-restarting -r0如果不需要重新启动,则返回,如果需要,1则非常适合在脚本中使用。

一个例子:

root@server1:~> needs-restarting  -r ; echo $?
Core libraries or services have been updated:
  openssl-libs -> 1:1.0.1e-60.el7_3.1
  systemd -> 219-30.el7_3.9

Reboot is required to ensure that your system benefits from these updates.

More information:
https://access.redhat.com/solutions/27943
1
Run Code Online (Sandbox Code Playgroud)

  • 对于 Fedora,`needs-restarting` 是 [一个 DNF 插件](https://dnf-plugins-core.readthedocs.io/en/latest/needs_restarting.html)。它不支持 `-r` 或 `-s`(目前)。 (2认同)

ale*_*exm 37

关于将已安装的内核与正在运行的内核进行比较:

#!/bin/bash
LAST_KERNEL=$(rpm -q --last kernel | perl -pe 's/^kernel-(\S+).*/$1/' | head -1)
CURRENT_KERNEL=$(uname -r)

test $LAST_KERNEL = $CURRENT_KERNEL || echo REBOOT
Run Code Online (Sandbox Code Playgroud)

希望有帮助!

  • 起初我认为这不起作用,因为它在我重启后继续告诉我重新启动,但后来发现如果您使用的是 DigitalOcean 实例,则需要在重新启动之前先从他们的控制面板手动更改内核。 (3认同)

小智 8

您可以将 uname -a 的输出与已安装的内核包列表进行比较

  • 不同的内核是 linux 服务器*需要*重启的唯一原因吗? (2认同)

小智 7

在“是否需要重新启动”方面可以帮助查看的一件事是是否有任何文件已被更新删除/替换,但活动进程仍加载/使用旧文件。

基本上,当 YUM 更新进程正在使用的文件时,文件本身可能已被标记为删除,但进程继续使用旧文件,因为它具有旧文件 inode 的打开文件描述符。

获取仍在使用的旧文件数量的命令:

#lsof | grep "(path inode=.*)" | wc -l
Run Code Online (Sandbox Code Playgroud)

该命令将为您提供文件计数。

使用它来查看实际使用的文件:

#lsof | grep "(path inode=.*)"
Run Code Online (Sandbox Code Playgroud)

该命令将在 YUM 更新的框中生成类似于以下内容的输出:

COMMAND    PID   USER   FD      TYPE DEVICE SIZE/OFF   NODE NAME
sshd      3782   root  mem       REG   8,17          153427 /lib64/libcrypto.so.0.9.8e (path inode=153253)
mysqld    3883  mysql  mem       REG   8,17          153259 /lib64/libcrypt-2.5.so (path inode=153402)
mingetty  4107   root  mem       REG   8,17          153243 /lib64/libc-2.5.so (path inode=153222)
...
etc
Run Code Online (Sandbox Code Playgroud)


ptm*_*man 7

uname -arpm -q kernelneeds-restartingyum-utils