Linuxサーバーをシャットダウンするコマンドの違いは何ですか?

Linuxサーバーをシャットダウンするコマンドの違いは何ですか?

読む「停止コマンドと終了コマンドの違いは何ですか?」、私は通常、-h / -rオプションがあるかどうかにかかわらず、shutdownコマンドが何をするのかを知っています。

"halt"コマンドは、システム電源をシステムランレベル0で終了します。

"shutdown"コマンドは、-hまたは-rコマンドを使用せずにシステム電源を実行レベル1で終了します。

もしそうなら、 "poweroff"コマンドはランレベル0または1に入りますか?これがこれら3つのコマンドの唯一の主な違いですか?

ベストアンサー1

今systemdに答えがあります。

質問のタグによると、Red Hat Enterprise Linuxを使用しています。バージョン7以降、systemdが使用されます。 systemdの場合、他の答えのどれも正確ではなく、あなたの質問のいくつかの仮定ではありません。

  • ランレベルを忘れました;存在しますが、互換性スペーサーとしてのみ存在します。 systemdドキュメントには、この概念が「古い」と記載されています。システムオペレーティングシステムでこの内容を学び始めたら、そこから始めないでください。
  • marcelm が参照するマニュアルページは、正しいツールセットではなく、systemd に無効な他のツールセットコマンドの説明です。これはhaltvan Smoorenburg "System 5"initユーティリティ会社の注文です。
  • /sbin/haltシンボリックリンクであるステートメントは無視されます/sbin/reboot。 systemdはそうではありません。reboot別のプログラムはまったくありません。
  • コマンドライン引数でプログラムを呼び出すhaltステートメントを無視してくださいrebootshutdownこれはsystemdにも正しくありません。shutdown別のプログラムはまったくありません。

各システム管理ツールセットには、これらのユーティリティの独自のバージョンがあります。 systemd、スタートアップ、おやつ、van SmoorenburginitおよびBSDにinitそれ自身haltpoweroff等があります。彼らの力学は少し異なります。マンページも同様です。

systemdツールセットからhalt、、、poweroffreboottelinitshutdownはいみんなへのシンボリックリンクは/bin/systemctl次のとおりです。みんな以前のバージョンと互換性のあるshimは、systemdのデフォルトのコマンドラインインタフェースを呼び出す略語ですsystemctl。それらはすべて同じにマッピングされます(実際には)。一つプログラム。 (通常、シェルは自分が呼び出された名前を伝えます。)

ランレベルではないターゲット

これらのコマンドのほとんどは、systemdにsystemctl次の略語を使用するように指示します。分離特定ターゲット。検疫はマニュアルページ(qv)に記載されていますが、systemctlこの回答の目的に応じて1つのターゲットを起動し、別のターゲットを停止することを検討してください。 systemd で使用される標準ターゲットは、systemd.special(8) のマニュアルページにリストされています。

bootupsystemdツールセット(特に最後の図)のマニュアルページ(7)にある図は、ここに関連する3つの「究極の」目標を示しています。

  • halt.target- システムがターゲットが完全に隔離された状態に達すると、reboot(RB_HALT_SYSTEM)システムコールが呼び出されます。カーネルはROMモニタに入ろうとするか、単にCPUを停止します(これを実行するのに適したメカニズムを使用して)。
  • reboot.target- システムがターゲットが完全に隔離された状態に達すると、reboot(RB_AUTOBOOT)システムコール(またはそれに対応する魔法コマンドライン)を呼び出します。カーネルは再起動を試みます。
  • poweroff.target- システムがターゲットが完全に隔離された状態に達すると、reboot(RB_POWER_OFF)システムコールが呼び出されます。カーネルは、可能であればシステムの電源を切断しようとします。

これら実行レベルではなく、最終システム状態で考慮する必要があります。図では、systemdターゲットシステム自体は明示的なものではなく、他のシステムに暗黙的に含まれる項目をエンコードします。たとえば、各最終ターゲットにはターゲットの概念が含まれているため、所有shutdown.targetするサービスを終了する前に停止する必要があるサービスについて説明します。紛争ターゲットshutdown.target

systemctl次にリクエストを送信してください。systemd-logind呼び出しユーザーがスーパーユーザーでない場合。また、遅延終了を渡します。systemd-shutdownd。一部の略語はwall通知をトリガーします。この複雑さを取り除き、現在スーパーユーザーであり、スケジュールされたタスクを要求していないと仮定すると、この回答は数倍長くなります。

  • systemctl isolate halt.target略語があります:
    • shutdown -H now
    • systemctl halt
    • 素朴さhalt
  • systemctl isolate reboot.target略語があります:
    • shutdown -r now
    • telinit 6
    • systemctl reboot
    • 素朴さreboot
  • systemctl isolate poweroff.target略語があります:
    • shutdown -P now
    • telinit 0
    • shutdown now
    • systemctl poweroff
    • 素朴さpoweroff
  • systemctl isolate rescue.target略語があります:
    • telinit 1
    • systemctl rescue
  • systemctl isolate multi-user.target略語があります:
    • telinit 2
    • telinit 3
    • telinit 4
  • systemctl isolate graphical.target略語があります:
    • telinit 5

systemctlさまざまなコマンドライン構文を解析した後、すべてプログラム内で同じコードパスで終了します。

メモ:

  • オプションのない一般的な行動はshutdown now方向を変えることです。シングルユーザーモード。 systemdではそうではありません。 rescue.target- シングルユーザーモードの名前が変更されました。構造モードsystemdではshutdownコマンドを介してアクセスできません。
  • telinit もちろんマニュアルページに記載されているように、ファイルシステム内のこれらすべてのエントリとシンボリックリンクを完全に無視してください。上記のマッピングはプログラムテーブルに組み込まれています。runlevelN.targetdefault.targetsystemctl
  • systemdには概念がありません。現在のランレベル。このコマンドの操作は、「実行レベルにある場合」によって条件が適用されません。窒素」。
  • 、およびコマンドのオプションは--force、およびコマンドのオプションと同じです。これにより直接ダイヤルします。通常、ターゲットを隔離しようとします。haltrebootpoweroff--force --forcesystemctl haltsystemctl rebootsystemctl poweroffsystemctlreboot()
  • telinit同じではありません。彼らはシステムの世界で別のプログラムです。後者はプログラムの名前ではなく、プログラムinitの別名です。このプログラムは、van Smoorenburg互換性でコンパイルする必要はまったくありません。systemdsystemctlsystemdinit N

追加読書

おすすめ記事