Categories
Linux

Linux 關機指令(shutdown、halt 與 poweroff)教學與範例

shutdown 指令

使用 shutdown 指令是一般 Linux 系統建議的關機方式,他會比較安全的讓系統正常關機,在使用 shutdown 指令關機時,所有登入系統中的使用者都會收到即將關機的警告訊息,而在關機的前五分鐘,也會禁止新的使用者登入。

shutdown 指令的使用方法如下:

shutdown [OPTION] TIME [MESSAGE]

其中 TIME 是指要關機的時間,其格式可分為好幾種:

  • now:指定為目前的時間,有就是立即關機的意思,這個應該是最常會被用到。
  • +m:指定多少分鐘之後關機,例如 +30 就是指 30 分鐘之後關機。
  • hh:mm:指定某個時間點關機,時間的格式是使用 24 小時制的,例如 18:30 就是下午六點三十分關機。

當 TIME 所指定的時間到了之後,shutdown 指令就會送出一個通知給 init 這個 daemon,讓系統進入適當的 runlevel,準備關機。

在選項(OPTION)的部分,可用的選項有:

  • -r:讓系統重新開機(reboot)。
  • -h:讓系統停止運作(halt)或關閉電源(power off),至於會選擇哪一種則取決於系統(有時候可以在 BIOS 中更改)。
  • -H:讓系統停止運作。
  • -P:讓系統關閉電源。
  • -c:取消之前所下達的關機指令。
  • -k:模擬關機,只有對使用者發出警告,並禁止新使用者登入,但不關機。

這裡的停止運作(halt)與關閉電源(power off)是有差異的,停止運作是指停止電腦上所有 CPU 的運作,這時候螢幕上應該會出現類似「System halted」的字眼,然後就停住了(電源還是開著的),而關閉電源(power off)就是會送出 ACPI 指令通知 PSU 關閉電腦的電源。

接著我們來看一些常用的 shutdown 指令範例。因為關機的動作只有 root 管理者有權限可以執行,所以在使用時記得在 shutdown 指令前加上 sudo -s 或是使用 su - 變更為 root

立即關機

這是最常用例子,大家應該也都是這樣用的。

shutdown -h now

也可以寫成這樣:

shutdown -h +0

或是用更簡潔的寫法:

shutdown -h 0

這些寫法都是一樣的。

指定時間關機

設定在當天的晚上 21:30 分關機。

shutdown -h 21:30

如果是使用 SSH 這類的遠端登入,要設定讓機器在某個時間關機,可以讓 shutdown 放在背景執行:

shutdown -h 21:30 &

下完這行指令就可以直接登出,然後系統在時間到的時候就會自己關機。

關機並送出警告訊息給所有使用者

在十分鐘之後關機,並送出一段訊息給所有目前還在登入中的使用者:

shutdown -h +10 "Development server is going down for maintenance. Please save your work ASAP."

而使用者所看到的訊息會類似這樣:

Broadcast message from root@wks01 (pts/0) (Sat Apr 21 02:26:30 2012):
Development server is going down for maintenance. Please save your work ASAP.
The system is going DOWN for system halt in 10 minutes!

取消關機

假設我們之前已經設定好在某個時間自動關機,如果想要取消,就使用:

shutdown -c

模擬關機

有時候我們沒有要真正關機,只是想嚇一嚇線上的使用者,或是在實際執行關機前,測試一下,可以搭配 -k 參數:

shutdown -k 18:30

這時候,系統只會送出關機的訊息,就像這樣:

Broadcast message from seal@steteo1
(/dev/pts/0) at 16:50 ...
The system is going down for maintenance in 100 minutes!

看到這個訊息之後,就不會繼續執行關機了,你可以藉此測試一下自己下的指令有沒有問題。

重新開機

入要重新開機,則使用 -r 參數:

shutdown -r now

另外,亦可使用 reboot 這個指令,效果也是一樣的:

reboot

halt 與 poweroff 指令

halt 其實跟 shutdown 沒多大分別,只不過 shutdown 在關機時會把系統的服務都關閉之後,才關閉電腦,而 halt 指令則允許不管系統的狀態為何,直接停止電腦的運作,例如:

halt -f

poweroff 指令也是類似的狀況,它也允許你不管系統的狀況,直接把電腦的電源切斷,例如:

poweroff -f

雖然系統有提供這樣的功能,但是其實這些功能在一般的狀況根本用不到,除非是系統真的當機,不然使用 shutdown 來關機會比較安全。

其他相關指令

這裡我們蒐集了一些跟 Linux 關機有關的指令範例。

查詢關機與重新開機的紀錄

如果要查詢機器的關機紀錄,可以使用 last 指令:

last -x shutdown

輸出為

shutdown system down  3.8.0-26-generic Mon Oct  7 19:03 - 19:31  (00:27)
shutdown system down  3.8.0-26-generic Mon Oct  7 16:07 - 19:00  (02:53)
shutdown system down  3.8.0-26-generic Mon Oct  7 11:59 - 14:53  (02:54)

而若要查詢重新開機的紀錄,方法也差不多:

last -x reboot

輸出為

reboot   system boot  3.8.0-26-generic Mon Oct  7 19:31 - 19:46  (00:15)    
reboot   system boot  3.8.0-26-generic Mon Oct  7 19:00 - 19:03  (00:02)    
reboot   system boot  3.8.0-26-generic Mon Oct  7 14:53 - 16:07  (01:13)