如何从命令行判断机器是否需要重新启动?

如何从命令行判断机器是否需要重新启动?

当您在 Ubuntu 桌面中安装某些更新(例如新内核)时,您会收到需要重新启动的提示(在 Lucid 中,注销图标变为红色)。

如何从命令行检查 Ubuntu服务器需要重启吗?

我可以在 中 grep '需要重启系统' /etc/motd,但我想要一个更优雅的解决方案。另外,我想要一个适用于旧版本的解决方案,例如 Hardy (8.04 LTS)。

答案1

您可以简单地检查该文件是否/var/run/reboot-required存在。

例如,如果您不需要重新启动,其中任何一个都会告诉您“没有这样的文件”或“找不到文件”,否则(如果您需要重新启动)该文件将存在,并且这些命令将显示有关该文件的信息:

file /var/run/reboot-required
stat /var/run/reboot-required
ls /var/run/reboot-required

在 bash 脚本中,你可以使用:

#!/bin/bash
if [ -f /var/run/reboot-required ]; then
  echo 'reboot required'
fi

答案2

在 debian-goodies 软件包中有一个名为的命令checkrestart,它非常有用。它的输出可以帮助您避免完全重启。

它会告诉您哪些正在运行的应用程序加载了在应用程序运行时升级的共享库。然后您可以手动重新启动应用程序和服务,从而避免完全重启。但对内核升级没有帮助。

答案3

通常情况下,如果文件

/var/run/reboot-required 

如果存在,则应重新启动。您可以在 gnome-terminal 中使用这个简单的命令来查看此文件是否存在。

ls /var/run/reboot-required

答案4

如果您安装了 reboot-notifier 或 update-notifier-common 软件包,那么您将获得文件 /var/run/reboot-required 和 /var/run/reboot-required.pkgs

重启通知程序在 Ubuntu Wily 和 Xenial 中较新。Debian 延伸,但在 jessie-backports 中

更新通知程序通用较旧,存在于所有 Ubuntu 版本,包括 Xenial 和 Debian Wheezy。不存在于 Debian Stretch 或 Jessie。

(reboot-notifier 软件包的背景信息请参见https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/

如果您没有安装这些软件包,那么您可以将安装的 Linux 软件包的版本与运行的版本进行比较:

tim@tramp:~$ dpkg -l linux-image-*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                              Version               Architecture          Description
+++-=================================-=====================-=====================-=======================================================================
ii  linux-image-3.16.0-4-amd64        3.16.7-ckt20-1+deb8u4 amd64                 Linux 3.16 for 64-bit PCs
ii  linux-image-amd64                 3.16+63               amd64                 Linux for 64-bit PCs (meta-package)
tim@tramp:~$ more /proc/version
Linux version 3.16.0-4-amd64 ([email protected]) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian <b>3.16.7-ckt20-1+deb8u3</b> (2016-01-17)

您可以在此处看到最新安装的内核是 3.16.7-ckt20-1+deb8u4,但运行的内核是 3.16.7-ckt20-1+deb8u3。因此,此系统需要重新启动。最后的 u4 与 u3 对比。

您可能需要滚动上面的框。在 /proc/version 中,重要的是行尾附近的版本。

非常小的版本代码变化是 Debian 安全内核更新的典型特征。

需要重启

另一个选择是安装该needrestart包。

sudo apt-get install needrestart
sudo needrestart -k

即使在内核升级后安装了 needrestart 似乎也能工作。

相关内容