server-memo.net

【CentOS】shutdownコマンドを使用したサーバの停止方法

   

CentOSで「shutdown」コマンドを使用してサーバを停止させる方法について調べたものをまとめてみました。(普段よく使うコマンドでも知らなかったオプションとかがあって面白かったです)

shutdownコマンドについて

システムを停止させる際に使用する「shutdown」コマンドは安全にシステムを停止してくれるだけではなく、下記の処理もあわせて行ってくれます。

  • ログインしている全ユーザにシステム停止のメッセージを通知
  • 「shutdown」処理開始5分前から新規ログインを禁止

新規ログインの禁止してくれるのは地味に助かったりします。

書式

メッセージに関しては、特に通知する必要なければ入力する必要はありません。

shutdown オプション 時刻 メッセージ

一般的な使い方としては下記のような使い方が多いでしょう。

# shutdown -h now  (即時サーバを停止)
# shutdown -r now (即時サーバを再起動)

オプション

オプションについての説明です。

オプション 説明
-H
--halt
システムは停止するがサーバの電源はOFFにならない(サーバのコンソールにはHalting.と表示されてシステムが停止)
-P
--poweroff
サーバの電源をOFFする(初期状態で指定ずみ)
-r
--reboot
サーバを再起動する
-h ステムを停止後サーバの電源をOFFにする
-k システムの停止やサーバの電源をOFFにすることなく、ログインしているユーザにメッセージを送信
--no-wall システム停止前にユーザにメッセージを送信しない
-c シャットダウン処理をキャンセルする。(時刻に+0 やnowが指定されている場合を除く)

「-H」オプションの使い道がちょっと思い浮かばないですね…

時刻設定

「shutdown」処理を行う際に設定する時刻は、下記の書式で設定することが出来ます。

hh:mm(時:分) 指定した時刻に「shutdown」処理を開始(時刻は24時間制で指定)
+m(分) 指定した時間(分)を経過後に「shutdown」処理を開始する
+0を指定するとすぐに「shutdown」処理が実行される
now 「shutdown」処理をすぐに実行

hh:mmで指定

「hh:mm」形式で時刻を指定する場合は、24時間制で時刻を指定します。

例えば「19:00」に「shutdown」処理を開始したい場合は下記のように設定します。

# shutdown -h 19:00
Shutdown scheduled for 土 2018-04-21 19:00:00 JST, use 'shutdown -c' to cancel.

+m 形式で指定

「+m」形式は指定した時間(分)を経過した後に「shutdown」処理を開始します。

例えば「+30」と指定すると30分後に「shutdown」処理を開始するよう設定できます。

# date
2018年  4月 21日 土曜日 18:52:10 JST
# shutdown -h +30
Shutdown scheduled for 土 2018-04-21 19:22:13 JST, use 'shutdown -c' to cancel.

now 形式

時刻に「now」と指定すると、すぐに「shutdown」処理を開始することが出来ます。

# shutdown -h now

時刻を指定しなかった場合

時刻を指定しなかった場合「CentOS6」の場合と「CentOS7」では挙動が異なります。

CentOS6の場合

「CentOS6」では時刻を指定しない場合は「shutdown」処理が開始されません。

# shutdown
shutdown: time expected
Try `shutdown --help' for more information.
CentOS7の場合

CentOS7では時刻を指定していない場合は1分後にshutdown処理が開始されます。

# date
2018年  4月 22日 日曜日 21:40:53 JST
# shutdown
Shutdown scheduled for 日 2018-04-22 21:41:55 JST, use 'shutdown -c' to cancel.

オプションについて

「CentOS6」と「CentOS7」で動作確認を行った際に、動作が異なったオプションについて説明していきます。

-H オプション

「-H」オプションを使用するとシステムの停止だけ行って、サーバの電源はONのままという状態になります。

VMware上で動作している「CentOS6」と「CentOS7」で「-H」オプションの動作試験を行ってみたところ、若干ですが表示メッセージが変わっていたので参考のためにそれぞれの結果を残しておきます。

CentOS6の場合

CentOS6の場合は「System halted.」と表示されシステムは停止しサーバの電源はONのままでした。

# shutdown -H now
Broadcast message from tamohiko@centos6.server-memo.net
        (/dev/pts/1) at 21:30 ...

The system is going down for halt NOW!

CentOS7の場合

CentOS7の場合は「Halting.」と表示されシステムは停止しサーバの電源はONのままでした。

# shutdown -H now

-k オプション

「-k」オプションを使用する際に時刻を「now」や「+0」を指定した場合、「CentOS6」ではメッセージを送信することが出来たのですが、「CentOS7」の場合はメッセージは送信されないといった違いがありました。

CentOS6の場合

時刻に+0を設定
# shutdown -k +0  "test messges"
#
Broadcast message from tamohiko@centos6.server-memo.net
        (/dev/pts/1) at 21:42 ...

The system is going down for maintenance NOW!
test messges
時刻にnowを設定
# shutdown -k now  "test messges"
#
Broadcast message from tamohiko@centos6.server-memo.net
        (/dev/pts/1) at 21:42 ...

The system is going down for maintenance NOW!
test messges

CentOS7の場合

CentOS7の場合は-kオプションを使用する場合は時刻を指定する場合「now」や「+0」等を指定すると、メッセージを送信することが出来ません。

時刻に「now」を設定

「Shutdown scheduled for...」といった、システムが表示するメッセージすら表示されませんでした。

# shutdown -k now  "Test message."
時刻に「+0」を設定

設定した「Test message.」というメッセージは表示されませんでした。

# shutdown -k +0  "Test message."
Shutdown scheduled for 日 2018-04-22 21:52:30 JST, use 'shutdown -c' to cancel.
時刻に「now」「+0」以外を設定

時刻に「now」や「+0」以外を設定した場合は、設定した「Test message.」というメッセージを送信することが出来ました。

# shutdown -k +1  "Test message."
Shutdown scheduled for 日 2018-04-22 21:54:15 JST, use 'shutdown -c' to cancel.
#
Broadcast message from root@localhost.localdomain (Sun 2018-04-22 21:53:15 JST):

Test message.  <--メッセージが送信された
The system is going down for power-off at Sun 2018-04-22 21:54:15 JST!

-c オプション

「-c」オプションの動作というよりも、「shutdown」コマンドを実行した後の状態が「CentOS6」と「CentOS7」では異なるために、「-c」オプションでキャンセルする場合の手順が異なります。

CentOS6の場合

「shutdown」コマンドを実行したターミナルでは、その後入力が出来ない状態となります。

# shutdown -h +30

Broadcast message from tamohiko@centos6.server-memo.net
        (/dev/pts/1) at 17:43 ...

The system is going down for halt in 30 minutes!

この場合は別のターミナルから「shutdown -c」を入力するか、「Ctrl」+「c」で「shutdown」処理をキャンセルすることが出来ます。

「Ctrl」+「c」でキャンセル

「Ctrl」+「c」を入力することで「shutdown」処理をキャンセルすることが出来ます。

# shutdown -h +30

Broadcast message from tamohiko@centos6.server-memo.net
        (/dev/pts/1) at 17:43 ...

The system is going down for halt in 30 minutes!

^Cshutdown: Shutdown cancelled  <---「Ctrl」+「c」を入力

CentOS7の場合

「CentOS7」の場合は「shutdown」コマンドを実行した後にプロンプトが戻ってきて、再度コマンドの入力を受け付けてくれます。

そのため、そのまま「-c」オプションを付けて「shutdown」コマンドを実行することでキャンセルすることが出来ます。

# shutdown -h +30
Shutdown scheduled for Fri 2018-04-27 18:30:43 JST, use 'shutdown -c' to cancel.
# shutdown -c  <--再度コマンド入力が可能となる

Broadcast message from root@150-95-131-86 (Fri 2018-04-27 18:00:54 JST):

The system shutdown has been cancelled at Fri 2018-04-27 18:01:54 JST!

「CentOS6」の場合と異なり「Ctrl」+「c」を入力しても「shutdown」処理はキャンセルされませんの注意してください。

# shutdown -h +30
Shutdown scheduled for Fri 2018-04-27 18:33:54 JST, use 'shutdown -c' to cancel.
# ^C

 - サーバ運用