重要: これにより、以前の動作を再び停止できます。
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として実行する間違いを犯しました。これは非常に効果的な学習経験でした。)