Linuxのshutdownコマンドとrebootコマンドについて質問です。
先日、職場で、rebootコマンドを実行するとまずいので、再起動時は"shutdown -r now"を指定するように言われました。
(環境変数や設定が消える?)
しかし、その理由が調べてもわかりません。
rebootコマンドとshutdownコマンドの違いは何なのでしょうか?
---追記 2016/12/17---
皆さん回答ありがとうございます。
質問が放置気味になってしまい、申し訳ありません。
様々な意見があり、とても参考になりました。
回答を見て疑問に思ったのですが、shutdowmコマンドのコードを見ることはできないのでしょうか?
"man page of SHUTDOWN"のページに記述されているファイルを見ても、ファイルが存在しないか、バイナリファイルなので、ソースコードの確認方法が存在するなら知りたいです。
追加の質問となってしまいますが、よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
その指摘した人、結構おっさんじゃないでしょうか?
この「rebootはシステムを壊すから使ってはいけない」はインフラ系SEの中で都市伝説のように語り継がれていますが、Linuxにおいては使っても全く問題ありません。正確には「UNIX(Linuxを含めず)で rebootはシステムを壊すから使ってはいけない」です。
Linuxについては、Man page of SHUTDOWNにあるように、reboot
はshutdown -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
を呼び出すreboot
やhalt
も同様です)。shutdown
等を実行する前にsync
を打たなくても問題はありません。Man page of SYNCも参考にしてください。
なお、私は昔の癖で
# sync # sync # sync # shutdown -i6 -g0 -y
と打ってしまういそうになる古い人間ですが…。
投稿2016/11/23 08:20
編集2018/05/22 15:39総合スコア21737
0
メッセージを表示しないかするかでしょうか?
"reboot" は "shutdown -r -q now"
と同じ意味だそうです
"shutdown -r now" は フラグの"-q"
を指定していないのでメッセージが表示されるそうです
参考URL
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230868/
投稿2016/11/23 06:18
総合スコア123
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/23 06:33
2016/11/23 06:45
2016/11/23 06:54
2016/11/23 06:56 編集
2016/11/23 07:04
2016/11/23 07:20
2016/11/23 07:29
2016/11/23 07:55 編集
0
もし違いがあるとすれば、電源を切るか切らないかでは。
電源を切っての起動と切らない場合の起動ではBIOSの動作の違いがある場合があります。(BIOS)はメーカーにより多少の違いがあります。
投稿2016/11/23 06:17
総合スコア3747
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/23 07:04
2016/11/23 08:04
2016/11/23 08:06
2016/11/23 08:06
2016/11/23 08:14
2016/11/23 08:17
2016/11/23 08:52
2016/11/23 09:24
2016/11/23 09:43
2016/11/23 13:50
2016/11/23 15:18 編集
2016/11/23 14:59
2016/11/23 21:56
2016/11/29 22:32
退会済みユーザー
2016/11/30 06:29
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) は、
ログインしているユーザにシステム停止の警告を与えます。
投稿2016/11/30 06:50
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/11/29 16:09
2016/11/29 21:10
退会済みユーザー
2016/11/30 06:26
2018/05/22 15:28
2018/05/22 15:57