読者です 読者をやめる 読者になる 読者になる

Man On a Mission

システム運用屋が、日々のあれこれを記録していくブログです。情報処理技術者試験の話題多し。高度試験の攻略についても書いてます。

【Linux】shutdownコマンドとreboot/halt/poweroffコマンド

Linux

前回、Windowsのshutdownコマンドについて触れました。
今回は、そのついでにLinuxのshutdownコマンドについて少々。

LinuxCUIで利用されることが多いので、当該コマンドはよく知られています(というか、基本的知識です)。
しかしLinuxには、他にもrebootやhalt、poweroffコマンドといった、再起動/電源オフのためのコマンドがあります*1
これらのコマンドについて、Linux使いに対して、どちらを使えばよいのか?と聞くと、大抵「shutdownで」という答えが返ってきます。
サーバ技術者の方は、サーバメンテ手順書なんかで、シャットダウン/再起動手順がshutdownコマンドになっているのを、よく目にされるのではないでしょうか。
人によっては、先輩技術者から「rebootやhaltは使っちゃダメ」と言われたことがあるかもしれません。

 なぜshutdownコマンドでなければならないのか?reboot/haltは本当にダメなのか?もし本当ならなぜダメなのか?
以上について、私の知る範囲で書いてみます。

rebootもhaltもダメじゃない

いきなり結論ですが、大抵の場合、rebootもhaltもダメじゃありません。
(もちろんpoweroffも。中身はreboot/haltと同じなので。)
普通に問題なく使えます。
というのも、システム通常動作時にhaltやrebootコマンドを実行した場合の挙動は、単純にshutdownコマンドを呼び出して実行するだけだからです。
このあたりの挙動についての詳細は、manコマンドでrebootやshutdownについて調べるか、または下記ページをご覧ください。

Man page of SHUTDOWN

Man page of HALT

なぜreboot/haltがダメという話になったのか

これは、ある意味歴史的経緯じゃないかと思います。
Linuxと異なり、その他のUNIX系OSSolarisBSDUNIXでは、shutdown = reboot/haltではありません。

SolarisBSDUNIXにおけるreboot/haltは、shutdownコマンドとは別物となっており、実行中プロセスにSIGTERMおよびSIGKILLを送出し、しかる後システムを停止します。
この過程では、shutdownと異なりサービスの依存関係や終了順などは考慮されません。
SolarisBSDUNIXにおけるreboot/haltは、トラブル等の特殊なケースに用いる強制終了なのです。

Linux普及前は、SolarisBSDUNIXが広く使われていました。その経験から、Linuxになって事情が変わっても、reboot/haltを忌避する風潮が続いたのだと思います。

それでもshutdown

とか書きましたが、「じゃあreboot使うわ。shutdownめんどくせーし。」と思われた方はちょっとストップ。
上記「大抵の場合、rebootもhaltもダメじゃありません。」と書きました。「大抵」というのが重要です。

Linuxディストリビューション次第で、shutdownが実はシェルスクリプトになっててrebootと挙動が違ってました、というケースが無いとは言えません。
利用しているシステムの挙動を理解しているなら良いのですが、そうでないなら、やはりshutdownコマンドを使ったほうが無難ではあります。
私の場合、UbuntuCentOSならrebootでもいいやと考えますが、よくわからないディストリビューションの場合はshutdownを使うでしょう。
(普段使っているディストリビューションでも、バージョンが違えば挙動が異なる可能性もあります。)

色々書いてきてなんですが、使用OSの挙動がよくわからない時、あまり把握してない時は、shutdownコマンドの利用がお勧めです。
ちょっと用心のし過ぎとも思えますが、世の中、思いがけないことがありますので。

 

 

*1:実際には、reboot、poweroffは、haltへのリンクであり、中身は同じです。