问题描述
在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中阅读。
第五种思路
/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,它似乎也能正常工作。