當前位置: 首頁>>技術教程>>正文


我怎麽能從命令行中知道機器是否需要重啟?

, ,

問題描述

在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/zh-tw/article/161.html,未經允許,請勿轉載。