解决 Ubuntu 每次登录都提示 System Restart Required 问题,关闭内核自动更新的方法

温馨提示:

本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。

最近一段时间通过 SSH 登录 Ubuntu 系统 VPS,有时提示 *** System Restart Required ***,即便重启了,过一段时间又出现这个提示,而实际上在这期间并没有对系统进行过任何操作。

问题分析

出现 *** System Restart Required *** 这个提示,说明存在 /var/run/reboot-required 文件,Ubuntu 软件包可以在安装时通过 postinst 创建该文件触发重启指令。

一般来讲,安装后需要重启的,大多是内核,或者安全补丁,可以查看文件 /var/run/reboot-required.pkgs 来确认:

# cat /var/run/reboot-required.pkgs
linux-image-4.15.0-54-generic
linux-base

可以看到 /var/run/reboot-required.pkgs 存在(正常不存在),且记录了是 linux-baselinux-image-4.15.0-54-generic 引起的,说明本次问题的原因是系统自动更新了内核或补丁。

常规解决方法

内核或补丁更新需要重启,这是肯定的,执行重启命令来应用内核或补丁:

# reboot

如果不想重启也不想在登录时看到*** System Restart Required ***,可以直接删除重启指令文件 /var/run/reboot-required

# rm -rf  /var/run/reboot-required

但是还是建议先看下是什么软件包引起的,根据实际情况决定是否重启。

关闭自动更新的解决方法

上面两个方法只是解决本次*** System Restart Required ***问题,过段时间在系统自动更新作用下,可能又会再次出现,因此我们可以屏蔽内核自动更新:

# apt-mark hold linux-base linux-image-generic linux-headers-generic libssl1.1

可能有人会说屏蔽自动更新不够安全,实际上对于生产环境来说,自动更新是危险的行为,你可能永远无法知道自动更新执行了什么命令,会对生产环境产生什么影响。

可以执行下列命令重新启用内核自动更新:

# apt-mark unhold linux-base linux-image-generic linux-headers-generic libssl1.1

新版的 Ubuntu 采用了 snap 套件管理工具,也会不定期 ubuntu repository 更新,故而还需禁用 snap:

# systemctl disable {snapd,snapd.socket,snapd.refresh.timer}
# systemctl stop {snapd,snapd.socket,snapd.refresh.timer}
此外,apt 本身也会自动更新,查看文件 /etc/apt/apt.conf.d/20auto-upgrades 可以看到默认是每天一次:
# cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

以及 /etc/apt/apt.conf.d/10periodic 

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";

这里将 1 改为 0 即可屏蔽。

屏蔽后,登录 SSH 可能会出现如下提示,忽略即可:

1 updates could not be installed automatically. For more details,
see /var/log/unattended-upgrades/unattended-upgrades.log
 

转自:https://vircloud.net/operations/fix-ubuntu-restart.html

参考文章:

1、《*** System Restart Required *** – Automated Linux Kernel Patches
2、《Ubuntu 上 apt 的 unattended-upgrades 自動更新