質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

shutdownコマンドとrebootコマンドの違いについて

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 10
  • VIEW 51K+

yu-ki0

score 70

Linuxのshutdownコマンドとrebootコマンドについて質問です。

先日、職場で、rebootコマンドを実行するとまずいので、再起動時は"shutdown -r now"を指定するように言われました。
(環境変数や設定が消える?)

しかし、その理由が調べてもわかりません。

rebootコマンドとshutdownコマンドの違いは何なのでしょうか?

---追記 2016/12/17---
皆さん回答ありがとうございます。
質問が放置気味になってしまい、申し訳ありません。

様々な意見があり、とても参考になりました。
回答を見て疑問に思ったのですが、shutdowmコマンドのコードを見ることはできないのでしょうか?
"man page of SHUTDOWN"のページに記述されているファイルを見ても、ファイルが存在しないか、バイナリファイルなので、ソースコードの確認方法が存在するなら知りたいです。

追加の質問となってしまいますが、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+46

その指摘した人、結構おっさんじゃないでしょうか?

この「rebootはシステムを壊すから使ってはいけない」はインフラ系SEの中で都市伝説のように語り継がれていますが、Linuxにおいては使っても全く問題ありません。正確には「UNIX(Linuxを含めず)で rebootはシステムを壊すから使ってはいけない」です。

Linuxについては、Man page of SHUTDOWNにあるように、rebootshutdown -r -q nowのエイリアスです(シェルのエイリアスというわけではなく、内部でshutdown -r -q nowを呼び出しているだけと言うこと)。shutdownと同じくinitシステムを6に切り替えるため、サービスを順番に落とし(最新のLinuxではsystemdやupstartが採用される場合が多いですが、同じように順番にサービスを落とします)、再起動を行います。サービスが依存関係に基づいた安全な順序でおとされ、各終了処理も実行されますので、shotdownを使う場合と同じく、安全に再起動が可能です。

しかし、LinuxではないUNIXでは違います。次の二つを見てください。
FreeBSD 11.0 | On-line Manual of "reboot"
Solaris 11.2 | reboot - マニュアルページセク ション 1M: システム管理コマンド
FreeBSDとSolarisでは、shutdownへのエイリアスででも呼び出す物でもありません。これらのrebootでは、initシステムの切り替えが発生せず、全てのプロセスに対して終了シグナルを送るだけです。サービスの終了順序は守られませんし、initスクリプトに記載された終了時の処理も行われません。そのため、サービスによってはテンポラリファイルやPIDファイルが残ったり、エラーが記録されたり、最後の情報が書き込まれなかったり等の不具合が起きる可能性があります。だから、通常は使ってはいけないコマンドだったのです。(shutdownコマンドと違い、各サービスの終了処理が終わらずいつまでも再起動しないと言うことがありません。そういった不具合が発生したときに、強制的に再起動したいときに使うのがrebootです。)

※ macOS Sierraのrebootも、マニュアルがFreeBSDと同じでしたの。OpenBSDでは、rcスクリプトの処理まで行いますが、shutdownとは独立しているようです。同じBSD系UNIXであっても細部の動作は異なる可能性があります。HP-UX等の他のSystem V系UNIXついてはわかりません。実機やマニュアル等をお持ちの方は情報をコメントいただければと思います。

ということで、そんなことを言われたら。man rebootと打って、その画面を見せながら、「えっ、先輩は、Linuxの場合はrebootがshutdown呼び出しと同じだから安全に再起動できる、って知らなかったですか?ププッ」とドヤ顔で言ってあげましょう。きっと、素敵な課題を与えてくれるに違いありません。


【追記】

  • Linuxにおいては、同様の理由でhaltも安全です。(UNIXでは危険)
  • shutdownには、オプションで無効を指定しない限りsyncの処理が含まれます(shutdownを呼び出すreboothaltも同様です)。shutdown等を実行する前にsyncを打たなくても問題はありません。Man page of SYNCも参考にしてください。

なお、私は昔の癖で

# sync
# sync
# sync
# shutdown -i6 -g0 -y


と打ってしまういそうになる古い人間ですが…。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/30 15:26

    raccyさんの博学かつ分かりやすい解説に膝を打った直後に
    AppleLisaの謎理論すぎるつまらない難癖でゲンナリ。

    キャンセル

  • 2018/05/23 00:28

    Linuxのrebootは安全だから使っても問題ない、それが新しい技術だというスタンスには反対です。それぞれのOSにはそれぞれの思想があり、それぞれ変える部分もあれば変えない部分もある。Linuxでrebootを使う癖がつけば、違うOSの管理をするときにうっかりrebootを使って問題を起こすかもしれない。だから若手に教えるならば、「"shutdown -r now"を使え。まあLinuxでは実質同じだが、汎用性のためにshutdownを使え。」と指導するのが真っ当な先達というものです。

    なお「BSD系は全て同じ」は正しくなく、OpenBSDではreboot/haltもrc.dスクリプトを逆順に呼び出して終了処理を行います。

    キャンセル

  • 2018/05/23 00:57

    > mzakiさん
    OpenBSDについては全く詳しくなかったので、マニュアルを探して確認し、編集しました。

    私は別に、rebootを使えと推奨しているつもりはありません。なぜダメなのか、どういう問題があるのか、きちんと理由を説明せずに、頭ごなしに使うなと言うことが問題だと思っています。LinuxとUNIXは近いようで遠いです。違いを説明せずにどっちでも使えると言う教え方は怖いです。

    キャンセル

+1

メッセージを表示しないかするかでしょうか?
"reboot" は "shutdown -r -q now"
と同じ意味だそうです
"shutdown -r now" は フラグの"-q"
を指定していないのでメッセージが表示されるそうです

参考URL
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230868/

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/23 16:20

    なるほどそういう背景があったのですね、おわかりかと思いますが自分はそのような背景についてなにがしかの考えがあるわけではありません(w; 単に「そういうことだったんじゃないかな」程度のものです。しかしrunlevel>=2(multi user mode)でもメッセージがでないことがあったんでしょうか?もしそうだったとしたら「えぇぇ」と思ってしまいますよね?

    キャンセル

  • 2016/11/23 16:29

    KSwordOfHasteさん、この質問、意外とシステムの運用についての会社の考え方が答えで、しかしながら何故そのようにの指示が欠落しまったための質問と推測しています。コマンドの違い(動作の違いであれば基本は私の回答が基本だった?)のでは?と回答した後に痛切に感じた次第です。

    キャンセル

  • 2016/11/23 16:54 編集

    再びなるほどです。AP/DB/Webサーバー/共有ホストいずれの運用でも「電源を切って再起動する」という意図を含んでいると言われると納得できる根拠に感じます。またrunlevel>=2ならばcat_breedさんの回答も根拠に感じられます。これらは相反するものではないので両方の意味がこめられている場合もあると思いました。

    キャンセル

0

まるまる^^;引用になりますが、freebsdのマニュアルでは以下のようになっています。(パラメータの説明は略してあります)

--shutdown--
shutdown ユーティリティは、自動的にシャットダウンするための手順をスーパユ
ーザに提供します。システムがシャットダウンされるときユーザに知らせるので、
こういったお知せを面倒がって行なわないシステム管理者やハッカーやグルと
いった人々から、ユーザを救います。

「中略」

システム停止の 10 時間前から、ログイン中の全てのユーザの端末に警告メッセ
ージが表示されはじめ、終末が近付くにつれ頻繁になってきます。システム停止
の 5 分前、もしくは 5 分以内にシステム停止する場合には、ただちに警告メッ
セージをコピーした /var/run/nologin が作られログインが禁止されます。ユー
ザがログインしようとした際にこのファイルが存在する場合には、 login(1) は
その内容を表示し終了します。このファイルは shutdown が終了する際に削除さ
れます。

システム停止時には、システムを停止した時間、実行者、理由がシステムログに
記録されます。その後、対応するシグナルが init(8) に送られ、システムを停止
、再起動、シングルユーザ状態のいずれかにします (この動作は上記のオプショ
ンに依存します)。システムを停止する時間と警告メッセージは
/var/run/nologin に置かれます。これをユーザにシステムを再開する時間や、な
ぜシステムを停止するかなどを知らせるために使うべきです。

計画されたシャットダウンは、 shutdown プロセスを殺すことにより打ち消せま
す (SIGTERM で十分です)。 shutdown が作成した /var/run/nologin ファイルは
、自動的に削除されます。

--reboot--

halt と reboot は、ファイルシステムのキャッシュをディスクへ書き出し、すべ
ての実行中のプロセスに SIGTERM を (そして、それに続いて SIGKILL を) 送り
ます。そして、システムを停止 ( halt ) したり、再起動 ( reboot ) したりし
ます。その動作は wtmp(5) ファイルに記入されます。それはログインのアカウン
ティングファイルへのシャットダウン記録の書き出しを含んでいます。

「中略」

通常、システムの停止や再起動を要する場合には、ユーザに事前警告を与えて特
定のプログラムを綺麗に停止する shutdown(8) を使用します。 shutdown(8) は、
ログインしているユーザにシステム停止の警告を与えます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-6

もし違いがあるとすれば、電源を切るか切らないかでは。
電源を切っての起動と切らない場合の起動ではBIOSの動作の違いがある場合があります。(BIOS)はメーカーにより多少の違いがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/24 06:56

    MasahikoHirataさん
    > 自分の認識の範囲
    そこはどの部分なのでしょうか?結局私の問い、どっちがどっちなのか?資料はないのか?には答えてくれないんですか?
    曖昧な返答をしないでください。何が間違っていたのか、はっきりしてください。もし、間違っていたなら、回答を修正してください。根拠が一切無いのであれば、根拠がない旨を回答に追記してください。Linuxについて知らないのなら、Linuxについて知らないと回答に追記してください。結局、未だに私にはこの回答自体に対しては正しいのか正しくないのか判断できません。

    キャンセル

  • 2016/11/30 07:32

    回答を見て「あれ?」と思ってしまいましたので、もし、間違っていたということであれば、回答の方を修正していただけないでしょうか。
    あと、shutdown -r と reboot は別として、パソコンの再起動で、電源を切っての起動と切らない場合の起動の2種類があるのでしょうか?もし、そうであれば、知っておきたいので、出典など教えていただけないでしょうか。ワンボードマイコンくらいだと、メモリの初期状態が違うので、リセットボタンでリセットするのと電源を切って数秒後に再投入するので動作が違う(まあ、ソフトウェアのバグなんですが)ことがあったように思いますが、今のパソコンでもそのようなことがあるのでしょうか?

    キャンセル

  • 2016/11/30 15:29

    ゼロ以下評価はたしかにただ間違いを指摘する以上の悪意を感じる。
    単純なプラス・マイナスだけではなくて、「疑問符」とか「物言い」みたいなマークがあったらいいと思う。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる