跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    Rocky 9:内核更新后重启的判断与安排

    Rocky 9.8 环境(特权容器,宿主内核 5.14.0-687.54.1.el9_8)实测:uname -r、needs-restarting -r、rpm -q kernel。日志:plans/content-expansion/evidence/logs/rocky-reboot-policy.log。

    容器 rootfs 里没有内核包(rpm -q kernel 返回未安装),所以「内核更新后返回 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

    rc=0 不用重启,rc=1 需要重启。判断依据是「自启动以来更新过的、影响运行中系统的包」,不是「今天装了多少包」。

    Terminal window
    rpm -q kernel
    package kernel is not installed

    容器共享宿主内核、自身不装 kernel 包——这也解释了为什么容器里的 needs-restarting -r 恒为 0:它看不到内核更新。这条结论不能搬到真实主机上。

    Terminal window
    needs-restarting
    dnf needs-restarting
    • needs-restarting:列出需要重启的服务;
    • dnf needs-restarting:dnf 子命令封装,语义相同;
    • needs-restarting -r:只回答整机是否必须重启。

    三者都来自 yum-utils。只重启服务能解决的,不要重启整机。

    更新对象处理
    kernel重启进新内核,否则漏洞未修
    glibc / systemd / openssl重启整机(进程共享这些库)
    普通服务(nginx、sshd)重启对应服务即可
    1. needs-restarting -r 确认确实需要;
    2. dnf history list 看这轮更新装了什么;
    3. 摘流(负载均衡/健康检查)、确认回滚镜像或快照;
    4. 重启后核对 uname -r、关键服务状态、needs-restarting -r 回到 0。
    • 容器里验证重启策略:容器无内核包,结论不可迁移;
    • 只看服务重启:内核与核心库不会因重启服务而生效;
    • 长期不重启:内核 CVE 补丁一直没生效。
    Terminal window
    needs-restarting -r; echo "rc=$?"
    needs-restarting
    uname -r

    检查:

    1. 记录 rc
    2. 列出需要重启的服务(如有)
    3. 说明当前内核版本与最新安装内核是否一致
    4. 给出是否需要整机重启的结论与理由

    常见问题

    为什么容器里 needs-restarting 总是 0?

    容器不装 kernel 包,共享宿主内核,工具看不到内核更新;重启策略必须在真实主机上判断。

    needs-restarting 与 dnf needs-restarting 有区别吗?

    语义相同,前者是独立命令、后者是 dnf 子命令,都来自 yum-utils;脚本里任选一种,注意不要与 -r 混用。

    重启前必须做什么?

    确认确实需要(-r 返回 1)、看 dnf history 了解影响面、摘流并准备回滚,重启后核对内核版本与服务状态。