跳转到内容
搜索 AlmaLinux 文档

    浏览当前文档目录

    AlmaLinux 9:内核更新后要不要重启

    在 AlmaLinux 9.8 真机(kernel 5.14.0-687.54.1.el9_8)上实际执行:uname -r、needs-restarting -r、needs-restarting、dnf needs-restarting、rpm -q kernel。日志:plans/content-expansion/evidence/logs/alma-reboot-policy.log。

    「更新后返回 1」的场景未在本机触发(本机当前无需重启),该分支按命令语义与 dnf 文档说明。

    Terminal window
    uname -r
    needs-restarting -r; echo "rc=$?"
    5.14.0-687.54.1.el9_8.x86_64
    No core libraries or services have been updated since boot-up.
    Reboot should not be necessary.
    rc=0

    退出码就是答案:0 = 不需要重启,1 = 需要重启。它比较的是「自启动以来被更新过的、影响运行中系统的包」,不是「有没有装新包」。

    Terminal window
    rpm -q kernel | tail -2
    kernel-5.14.0-427.13.1.el9_4.x86_64
    kernel-5.14.0-687.54.1.el9_8.x86_64

    本机装了两个内核(一个 9_4 的旧版本、一个正在运行的 9_8),needs-restarting -r 仍返回 0——旧内核留在盘上不等于需要重启,关键是你现在运行的是不是最新安装的那个。

    Terminal window
    needs-restarting # 列出需要重启的服务
    dnf needs-restarting # dnf 子命令形式,语义相同

    前者输出「哪些服务需要重启」,后者是 dnf 子命令封装;两者都来自 yum-utils,不是 dnf-plugins-core。只重启服务能解决的,不必重启整机。

    更新内容是否必须重启
    内核(kernel)是(新内核要重启才生效)
    glibc / systemd / openssl 等核心库是(运行中的进程仍用旧库)
    普通用户态服务否,重启对应服务即可

    needs-restarting -r 返回 1 时,通常是前两类。

    Terminal window
    needs-restarting -r || echo "需要安排重启"
    sudo dnf history list | head -3

    先看这轮更新装了什么(dnf history),再决定窗口;生产上配合负载均衡摘流、健康检查与回滚预案。不要用「更新完立刻重启」当默认动作,也不要长期不重启导致内核漏洞补丁不生效。

    • 只看 dnf update 成功:更新成功不代表漏洞已生效,内核/核心库要重启;
    • 用 needs-restarting(无 -r)判断整机:它列的是服务,不是「是否必须重启整机」;
    • 长期不重启:内核安全更新一直没生效。
    Terminal window
    sudo dnf -y update
    needs-restarting -r; echo "rc=$?"
    needs-restarting
    sudo dnf history list | head -3

    检查:

    1. 记录 rc 是 0 还是 1
    2. rc=1 时,能说出是内核还是核心库导致
    3. 能列出需要重启的服务
    4. 能给出重启窗口与回滚方案

    常见问题

    needs-restarting -r 返回 0 就完全安全吗?

    它只覆盖「已安装包对运行中系统的影响」,不覆盖配置漂移、证书过期等问题。安全补丁生效仍需确认相关服务或内核是否已加载新版本。

    为什么装了新内核但没重启,漏洞还在?

    运行中的还是旧内核。内核更新只有重启进入新内核才生效;这也是内核类 CVE 修复必须安排重启的原因。

    能只重启服务不重启机器吗?

    普通服务可以;内核与 glibc/systemd 这类核心组件不行,它们被所有进程共享,必须重启整机。