重要: これにより、以前の動作を再び停止できます。
apt install sysvinit-core
追加する:古い赤い帽子ベースバージョンは停止して電源を切ることもできます。
私はなぜDebian 9でコンピュータをシャットダウンするためにもはや停止を使用してはいけないのかを理解しようとしています。この動作はsystemdから削除されました。少し怖かったのですが、妥当な論理的な理由があると思いました。
他のUnixまたはUnixファミリーシステムは同じように動作しますか、それともLinuxは異なりますか?
これで、シャットダウン後にシャットダウンするには、停止の代わりにpoweroffを使用する必要があります。
このコマンドが他のUnix系システムでどのように解釈されるかを知っている人はいますか?
たとえば、Debian 7 は一時停止して電源を切ることができるため、これは重複しません。
答え1
ダーバン
Debian(esque) システムで SysVinit を使用する場合は、/etc/defaults/halt
ランレベル 0 への移行が完了したらシステムを一時停止するのか、電源を切るべきかを定義する変数が含まれています。デフォルト設定はですHALT=poweroff
。
halt
SysVinit 2.74より前は直接実行しないでください。そのバージョン以降、SysVinitコマンドは現在の実行レベルが0または6以外でhalt
呼び出されます。これはマニュアルページに文書化されています。ランレベル0への移行が完了すると、デフォルトでランレベルスクリプトが実行されます。shutdown -h
halt(8)
$HALT
poweroff
RHEL/セントOS
RHEL/CentOS 5 は SysVinit を使用する最後のバージョンです。バージョン6ではこれを使用しupstart
、バージョン7ではこれを使用しますsystemd
。 RHEL 5.11 から実行レベル 0 に切り替えたときに実行する最後のスクリプトは、最後の数行/etc/init.d/halt
は次のとおりです。
[ "$INIT_HALT" != "HALT" ] && HALTARGS="$HALTARGS -p"
exec $command $HALTARGS
ランレベル6への切り替え(再起動)が終わっても同じスクリプトが実行されるため、実際のコマンドの実行は変数によって定義され、これまたはに$command
なります。変数の値によって、スクリプトはオプションを追加するかどうかを決定します。この変数はで設定されます。 RHEL 5.11 のマニュアルページには次のように記載されています。/sbin/halt
/sbin/reboot
$INIT_HALT
-p
/sbin/shutdown
shutdown(8)
停止または停電
-Hオプションは単に初期化環境変数INIT_HALTをHALTに設定し、-Pオプションは単に変数をPOWEROFFに設定します。 quit(8) を終了シーケンスの最後の操作として呼び出す終了スクリプトは、これらの環境変数を確認し、そのオプションが実際に効果を示すように正しいオプションを指定して quit(8) を呼び出す必要があります。 Debian 3.1(sarge) はこれをサポートします。
(はい、RHEL 5.11のマニュアルページにはDebian 3.1が記載されています!
/etc/init.d/halt
RedHatは、電源オフ(/sbin/halt -p
システムのシャットダウン時に使用される)がデフォルトの停止動作であるスクリプトで上記のテストをコーディングすることを決定したようです。電源を切らずに停止を達成する唯一の方法は、-H
大文字のオプションを使用して明示shutdown
的に要求することです。コマンド、例えばshutdown -hH now
halt
ただし、デフォルトの電源オフはLinuxディストリビューションでカスタマイズされた実行レベルスクリプトによってトリガされるため、SysVinitコマンドの実際の機能ではありません。
歴史記録
SysVinitを使用する以前のシステム(Linuxおよび非Linux)には直接使用されず、単に適切なシャットダウン/再起動スクリプトの一部として使用されるいくつかのコマンドがありました。 SysVinit 2.74以前は、/sbin/halt
オプションのないコマンドはhalt -f
現代のSysVinitと同じことをしました。つまり、サービスを停止したりファイルシステムをマウント解除したりせずにカーネルを残酷にしてすぐにシャットダウンします。
同じ理由でLinuxkillall
コマンドに慣れるのは、他のUnixでも危険です。マニュアルページには、次のような不吉な警告もあります。
Linux 以外のシステムで killall 名を入力すると、特に特権を持つユーザーが実行している場合、期待した効果がない可能性があります。
これは、Classic SystemVがkillall
終了スクリプトの一部としてのみ使用されるように設計されたコマンドの1つであるためです。 SysVinit を含む Linux ディストリビューションでは、このコマンドのクラシックバージョンがkillall5
kill になることがあります。みんなカーネルスレッド以外のプロセスとセルフセッションのプロセス:すべてのサービスをシャットダウンした後にローカルファイルシステムをアンマウントする前に、シャットダウンスクリプトでアンマウントを遅延または防止できる他のプロセスをシャットダウンするために使用されます。
killall <something>
(これをどのように知ることができますか?まあ、私はかつてSolaris 2.6システムでrootとして実行する間違いを犯しました。これは非常に効果的な学習経験でした。)
答え2
この質問はいくつかの嘘に基づいています。
halt
人々はコンピュータをシャットダウンするためにそれを使用せず、これはsystemdでも変更されませんでした。
halt
別名終了haltsys
して停止します。 poweroff
シャットダウンおよび電源オフに使用される最新のコマンドです。 (https://unix.stackexchange.com/a/196471/5132微妙な部分が説明されていますが、質問はLinuxオペレーティングシステムにのみ関連しているので、ここでは簡単に説明します。この回答は、AT&T System 5 UNIXの側面にのみ焦点を当てています。 )
私が説明したようにhttps://superuser.com/a/900205/38062、コンピュータが必ずしも必要ではありません。有能なソフトウェア制御で電源を切ります。haltsys
そして、命令された動作はhalt
通常、機械をシャットダウンして停止することです。次の動作は、オペレータが物理リセットボタンまたは電源スイッチを使用することです。
halt
-p
/オプションは--poweroff
同じにするために追加されましたが、poweroff
これはこれらのコマンドに対して一般的に重複して矛盾するオプションが増加したことを示しています。証人halt
Debian 7 の Upstart コマンドのマニュアルページ。まさにhalt --poweroff
そこ。 halt
Debian 7 の van Smoorenburg コマンドのマニュアルページ同じものhalt -p
。
しかし、これはいいえsystemdはいくつか変更しました。 systemdは同じ機能を提供します。これシステムhalt
コマンド 返品持っています--poweroff
。また--reboot
、(良い測定のために)--halt
オプションもあります。
私も同じことをしなければなりません。noshツールセットのhalt
/コマンドhaltsys
、互換性のため。
あなたはできます間違っているその普通の古いhalt
コンピュータがコンピュータをシャットダウンします。しかし、これはUpstartにとって明らかに間違っています。ただvan Smoorenburgツールセットに適用されます。もしエラーが発生した場合。
今年最終的に修正されたバグは、van Smoorenburghalt
コマンドは単にオプションの存在を無視し、-p
代わりに/etc/default/halt
。電源オフに設定した場合、オプションが指定されていなくてもhalt
電源は常にオフになります。-p
逆に、その設定を停止に設定すると、オプションが指定されていてもhalt
常に停止します。-p
しかし、これは間違いですは文書化または予想される動作ではなく、Debianで使用できるすべてのコマンドの動作ではなく、一般的なコマンドの一般的な動作でもhalt
ありません。halt
追加読書
- ジョナサン・デ・ボーイン・ポラード(2018-12-07)。バグ#586709:Thomas Goirandによって閉じられました。 Debian のバグ #586709.
- ジェシー・スミス(2019-03-08)。initscripts: コマンドが
halt
予期せず動作を変更しました。。 Debianのバグ#743555。