在Ubuntu桌面上安装某些更新程序(例如新内核)时,您会看到需要重新启动的指示(在Lucid中,注销图标变为红色)。
如何从命令行检查Ubuntu 服务器是否需要重启?
我可以在中使用grep表示“需要系统重新启动” /etc/motd
,但是我想要一个更优雅的解决方案。另外,我想要一个适用于较早版本的解决方案,例如Hardy(8.04 LTS)。
在Ubuntu桌面上安装某些更新程序(例如新内核)时,您会看到需要重新启动的指示(在Lucid中,注销图标变为红色)。
如何从命令行检查Ubuntu 服务器是否需要重启?
我可以在中使用grep表示“需要系统重新启动” /etc/motd
,但是我想要一个更优雅的解决方案。另外,我想要一个适用于较早版本的解决方案,例如Hardy(8.04 LTS)。
Answers:
您可以简单地检查文件是否/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
/var/run/reboot-required.pkgs
将列出需要重启的软件包。
在软件包debian-goodies中,有一个名为的命令checkrestart
,它非常有用。它的输出可以帮助您避免完全重新启动。
它告诉您哪些正在运行的应用程序已加载在应用程序运行时已升级的共享库。然后,您可以手动重新启动应用程序和服务,并避免完全重新启动。但是,这对内核升级没有帮助。
以及其他人编写的最直接的方法,如果您使用byobu,则会有一个方便的指示-一组脚本使GNU屏幕更加用户友好。它在屏幕底部显示了一组信息,其中包括是否需要重新启动-以及更新是否可用,时间,正常运行时间,使用的内存...
在此屏幕快照中,您可以从199!
带有红色背景的底行上看到199个可用更新。一个!!
意味着一些是安全更新。前景中的菜单正在选择应显示哪些状态通知。
如果需要重新启动,则将由(R)
下部栏中显示的符号表示,蓝色背景上带有白色文本。可以在byobu手册页中了解更多详细信息和其他指标。
如果安装了重新启动通知程序或更新通知程序公共软件包,则将获得文件/ var / run / reboot-required和/var/run/reboot-required.pkgs
reboot-notifier在Ubuntu Wily和Xenial中较新。Debian舒展,但在杰西的支持中
update-notifier-common在所有Ubuntu版本(包括Xenial和Debian Wheezy)中都较旧。不在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 / version中,重要的是靠近行尾的版本。
非常小的版本代码更改是Debian安全内核更新的典型代表。
另一种选择是安装needrestart
软件包。
sudo apt-get install needrestart
sudo needrestart -k
即使在升级内核后安装了needrestart,它似乎也能正常工作。
dpkg-query: no packages found matching linux-image-*
Unknown option: k
在Ubuntu 14.04中。
穷人的解决方案:
#!/bin/bash
default=$(sed -n 's/^default[ ]*\([0-9][0-9]*\).*/\1/p' /boot/grub/menu.lst | tail -1)
if [ "$default" = "" ]; then default=0; fi
want=$(sed -n 's/^kernel[ ]*\/boot\/vmlinuz-\([^ ]*\).*/\1/p' /boot/grub/menu.lst | sed -n "$((default+1))p")
running=$(uname -r)
if [ "$running" = "$want" ]
then
: OK, do nothing
else
echo "Running $running, want $want. Reboot required."
fi
(注意:内部带有空格的方括号的三种情况应为“ [<space> <tab>]”。)
这不是问题的答案,而是有关以下几种回答的警告: /var/run/reboot-required
这不是是否确实需要重新启动的可靠来源。
简单测试:当新内核可用时,安装它,然后重新启动。重新引导后,运行apt autoremove
以摆脱一些不再需要的旧内核。运行完之后,它将指出需要重新启动,这完全是废话。