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

如何从命令行,Ubuntu服务器是否需要重启?

我可以在/etc/motd中grep表示“需要系统重启”,但是我想要一个更优雅的解决方案。另外,我想要一个适用于较旧版本的解决方案,例如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
 


评论


这有效,并且在Hardy上也有效。 (在Dapper 6.06上无法使用,我仍然在一台计算机上使用。很困难。)顺便说一句,/ var / run / reboot所需的文件是由/ usr / share / update-notifier / notify-reboot创建的-required,可从各种程序包的维护程序脚本中调用。

– Marius Gedminas
2010年7月29日在14:23

如果我安装了update-notifier软件包,它也可以在Dapper上运行,只是它希望将价值120兆的GNOME东西拉入我的旧服务器中。

– Marius Gedminas
2010年7月29日14:27



最好安装update-notifier-common,它不依赖于任何GUI东西(但Dapper不存在)。

– Marius Gedminas
10年7月29日在14:35

FWIW,默认情况下,未在Lucid服务器上安装update-notifier-common。

– Marius Gedminas
10年7月29日在14:37

谢谢! /var/run/reboot-required.pkgs文件将列出需要重启的软件包。

–nealmcb
15年2月22日在17:21

#2 楼

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

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

评论


如何避免完全重启?

– Oxwivi
2011年9月9日15:03

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

– aquaherd
2011-09-15 20:38

这应该是最佳答案。很有帮助。 OpenSUSE内置了一个工具(还可以帮助您如何运行它)。可耻的Ubuntu只是“重启,重启”。例如上色需要在这里重新启动。因此,无需重新启动。

– Apache
2013年3月11日14:22

@aquaherd非常有用的评论-也许值得将其引入您的答案?

–邓肯·琼斯(Duncan Jones)
18年2月5日在16:44

#3 楼

通常,如果存在文件

/var/run/reboot-required 


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

ls /var/run/reboot-required


评论


该文件似乎不再从用于创建该文件的update-notifier-common中创建。

–斯科特
18年7月5日在15:13

#4 楼

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

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

如果需要重新启动,则将通过下部栏中显示的符号(R)表示,蓝色背景上带有白色文本。有关更多详细信息和其他指标的信息,请参见byobu手册页。



#5 楼

如果您已安装重新启动通知程序或update-notifier-common软件包,则将获得文件/ var / run / reboot-required和/var/run/reboot-required.pkgs

reboot-通知程序在Ubuntu Wily和Xenial中是较新的。 Debian可以扩展,但可以在jessie-backports中使用。

update-notifier-common在所有Ubuntu版本(包括Xenial和Debian Wheezy)中都较旧。

(在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)


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

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

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

needrestart

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

sudo apt-get install needrestart
sudo needrestart -k


即使在升级内核后安装了Needrestart,它似乎仍然可以工作。

评论


您的第一段与Ubuntu版本有何关系?

–muru
16 Mar 6 '16 at 22:16

好点子。谢谢。我花了很长时间测试并尝试了错过的那些软件包。我进行了编辑,以使其更加清晰并包含ubuntu软件包信息。

– Tim Bray
16 Mar 7 '16 at 23:52

回到8.04,需要重新启动的更新后,齿轮会变成红色。如何恢复该行为?

–企鹅CSC
16年6月14日在8:53

Ubuntu 14.04,我得到dpkg-query:找不到与linux-image- *匹配的软件包

–the_nuts
16-09-26在10:36

未知选项:Ubuntu 14.04中的k。

– Cees Timmerman
16年11月17日在14:58

#6 楼

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

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

评论


update-notifier-common曾经用来创建这个,但是现在不再

–斯科特
18年7月5日在15:14

#7 楼

我在.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:~$ 


#8 楼

可怜的人的解决方案:

#!/bin/bash
default=$(sed -n 's/^default[   ]*\([0-9][0-9]*\).*//p' /boot/grub/menu.lst | tail -1)
if [ "$default" = "" ]; then default=0; fi

want=$(sed -n 's/^kernel[       ]*\/boot\/vmlinuz-\([^  ]*\).*//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


(注意:三个方括号内带有空格的情况应为“ [ ]”。) />

评论


grub 2不再使用/boot/grub/menu.lst,现在是/boot/grub/grub.cfg。

– Marius Gedminas
18/12/5在8:52

#9 楼

不是问题的答案,而是关于以下几种回答的警告:/var/run/reboot-required并不是确定是否确实需要重启的可靠来源。

简单测试:当有新内核可用时,重新安装。
重新启动后,运行apt autoremove摆脱一些不再需要的旧内核。运行该命令后,它将指出需要重新启动,这完全是胡说八道。

评论


好了,删除内核会重新生成您的grub配置文件,之后重新启动可能是一个好主意,以验证您仍然可以启动。至少这就是我为自己证明这个(错误)功能的方式。

– Marius Gedminas
17年9月14日在10:15