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

Mar*_*nas 294 package-management command-line

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

如何从命令行检查 Ubuntu服务器是否需要重新启动?

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

Web*_*ide 333

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

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

file /var/run/reboot-required
stat /var/run/reboot-required
ls /var/run/reboot-required
Run Code Online (Sandbox Code Playgroud)

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

file /var/run/reboot-required
stat /var/run/reboot-required
ls /var/run/reboot-required
Run Code Online (Sandbox Code Playgroud)

  • 更好地安装 update-notifier-common,它不依赖于任何 GUI 的东西(但不存在于 Dapper)。 (10认同)
  • 谢谢!并且文件`/var/run/reboot-required.pkgs` 将列出需要重启的包。 (5认同)
  • 如果我安装了 update-notifier 包,它也可以在 Dapper 上工作,只是它想将价值 120 兆的 GNOME 内容拉入我的旧服务器。 (2认同)

aqu*_*erd 48

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

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

  • 它告诉您,哪些正在运行的应用程序加载了在应用程序运行时升级的共享库。然后手动重新启动应用程序和服务并避免完全重新启动。但是对内核升级没有帮助。 (11认同)

小智 34

通常如果文件

/var/run/reboot-required 
Run Code Online (Sandbox Code Playgroud)

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

ls /var/run/reboot-required
Run Code Online (Sandbox Code Playgroud)


Ham*_*ner 18

除了其他人编写的最直接的方法之外,如果您使用byobu,还有一个方便的指示- 一组脚本,使 GNU 屏幕更加用户友好。它在屏幕底部显示一组信息,其中可能包括是否需要重新启动——以及更新是否可用、时间、正常运行时间、使用的内存......

在此屏幕截图中,您可以从199!带有红色背景的底行看到有 199 个可用更新。A!! 表示有些是安全更新。前台的菜单正在选择应显示哪些状态通知。

如果需要重新启动,那么这将通过(R)下方栏中显示的符号指示,并带有蓝色背景上的白色文本。更多细节和其他指标可以在byobu 手册页中阅读

截屏


小智 11

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

reboot-notifier在 Ubuntu Wily 和 Xenial 中更新。Debian 延伸,但在 jessie-backports 中

update-notifier-common较旧,在所有 Ubuntu 版本中,包括 Xenial 和 Debian Wheezy。不在 Debian Stretch 或 Jessie 中。

(在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 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian <b>3.16.7-ckt20-1+deb8u3</b> (2016-01-17)
Run Code Online (Sandbox Code Playgroud)

您可以在这里看到最新安装的内核是 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
Run Code Online (Sandbox Code Playgroud)

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


ajm*_*tch 9

/etc/motd文件从文件中获取有关是否需要重新启动的信息/var/run/reboot-required

您可以使用cat /etc/motd命令在终端中检查此文件的内容


小智 9

我将以下内容添加到我的 .bash-aliases 文件中:

alias rr='if [ -f /var/run/reboot-required ]; then echo "reboot required"; else echo "No reboot needed"; fi'
Run Code Online (Sandbox Code Playgroud)

似乎比为这个相对简单的任务安装一个包更简单。然后我就跑:

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 
Run Code Online (Sandbox Code Playgroud)