【Linux】shutdownコマンドとreboot/halt/poweroffコマンド
前回、Windowsのshutdownコマンドについて触れました。
今回は、そのついでにLinuxのshutdownコマンドについて少々。
LinuxはCUIで利用されることが多いので、当該コマンドはよく知られています(というか、基本的知識です)。
しかし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について調べるか、または下記ページをご覧ください。
なぜreboot/haltがダメという話になったのか
これは、ある意味歴史的経緯じゃないかと思います。
Linuxと異なり、その他のUNIX系OS、SolarisやBSD系UNIXでは、shutdown = reboot/haltではありません。
SolarisやBSD系UNIXにおけるreboot/haltは、shutdownコマンドとは別物となっており、実行中プロセスにSIGTERMおよびSIGKILLを送出し、しかる後システムを停止します。
この過程では、shutdownと異なりサービスの依存関係や終了順などは考慮されません。
SolarisやBSD系UNIXにおけるreboot/haltは、トラブル等の特殊なケースに用いる強制終了なのです。
Linux普及前は、SolarisやBSD系UNIXが広く使われていました。その経験から、Linuxになって事情が変わっても、reboot/haltを忌避する風潮が続いたのだと思います。
それでもshutdown
とか書きましたが、「じゃあreboot使うわ。shutdownめんどくせーし。」と思われた方はちょっとストップ。
上記「大抵の場合、rebootもhaltもダメじゃありません。」と書きました。「大抵」というのが重要です。
Linuxのディストリビューション次第で、shutdownが実はシェルスクリプトになっててrebootと挙動が違ってました、というケースが無いとは言えません。
利用しているシステムの挙動を理解しているなら良いのですが、そうでないなら、やはりshutdownコマンドを使ったほうが無難ではあります。
私の場合、UbuntuやCentOSならrebootでもいいやと考えますが、よくわからないディストリビューションの場合はshutdownを使うでしょう。
(普段使っているディストリビューションでも、バージョンが違えば挙動が異なる可能性もあります。)
色々書いてきてなんですが、使用OSの挙動がよくわからない時、あまり把握してない時は、shutdownコマンドの利用がお勧めです。
ちょっと用心のし過ぎとも思えますが、世の中、思いがけないことがありますので。