当前位置: 首页>>技术教程>>正文


我怎么能从命令行中知道机器是否需要重启?

, ,

问题描述

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

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

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

最佳解决思路

您可以简单地检查文件/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

次佳解决思路

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

第三种解决思路

通常如果文件

/var/run/reboot-required 

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

ls /var/run/reboot-required

第四种思路

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

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

如果需要重启,那么将在下栏中显示符号(R),并在蓝色背景上显示白色文字。更多细节和其他指标可以在byobu man page中阅读。

command-line,package-management,ubuntu

第五种思路

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

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

第六种思路

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

alias rr='if [ -f /var/run/reboot-required ]; then echo "reboot required"; else echo "No reboot needed"; fi'

看起来比为这个相对简单的任务安装软件包更简单。然后我只是运行:

you@somewhere:~$ rr
No reboot needed
you@somewhere:~$ 

第七种思路

如果安装了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在包括Xenial和Debian Wheezy在内的所有Ubuntu版本中,年龄较大。不在Debian Stretch或Jessie中。

(在https://feeding.cloud.geek.nz/posts/introducing-reboot-notifier/的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)

你可以在这里看到最新安装的内核是3.16.7-ckt20-1 + deb8u4,但运行的内核是3.16.7-ckt20-1 + deb8u3。所以这个系统需要重启。 u4 vs u3在最后。

您可能需要滚动上方的框。在/proc /版本中,它是接近行尾的版本。

Debian安全内核更新的典型代码是非常小的版本代码更改。

needrestart

另一种选择是安装needrestart软件包。

sudo apt-get install needrestart
sudo needrestart -k

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/161.html,未经允许,请勿转载。