GNU/Linux >> Linux の 問題 >  >> Linux

物理スイッチ/ソケットを使用せずにコンピューターを即座に (1 ~ 5 秒) シャットダウンする方法は?

sudo shutdown -h now

特別な理由がない限り、次のことはお勧めしません:

kill -SEGV 1   # should generate a core dumps and kernel panic
kill -ABRT 1   # should generate a core dumps and kernel panic
kill -9 1      # On old systems worked nowadays not

乱暴で残忍で、電源コードを抜くのとほぼ同じと見なすことができます ...

正しい方法 shutdown -h now です sudo で 必要なときの前に。
多分私は合法的な方法と言うべきです;以下を参照してください。

もう少し 、別名 物語、第 1 章
最初に init があり、最後まで続きます。

Linux 全体が愛情深いケアに依存しています init の .とはいえ、ある程度の恩知らずではないわけではありませんが、善良な root ユーザー この愛を裏切って突然 kill 議論の余地のない初期化 (-9 ) 注文。
(エチケットの書は、伯爵、公爵、侯爵の使用者について規定しています sudo の前に呼び出す ).

その後、何人かのウィザードが init を保護するためのチャームを作成しました (Book of man 2 init より) )

<ブロック引用>

プロセス ID 1 の init プロセスに送信できるシグナルは、init がシグナル ハンドラを明示的にインストールしたものだけです。これは、システムが誤ってダウンしないようにするためです。

その init は 1 HUP 6 ABRT 11 SEGV 15 TERM 30 PWR 2 INT 10 USR1 14 ALRM 17 CHLD 32) を処理します
ですから、善良な root ユーザー ニュースを学び、kill -ABRT 1 でコマンドを変更します または kill -SEGV 1 通常、カーネル パニックとコア ダンプが生成されます。

init があるため機能します は最初に実行するプロセスで、PID 番号 1 を取ります。

これは危険で賢明ではなく、不吉な前兆や呪いの前兆だと感じますが、実質的に手を差し伸べたりプラグを抜くことができない場合は...

呪い :ログに書き込まず、すべてのプロセスを強制終了せず、その終了を待機しません。inode を適切に更新して HDD に書き込みません。また、ファイルシステムをアンマウントしません。グラフィカル ウィンドウのオプションやシェルの履歴、その他多くのオプションが保存されることを気にしないでください。

正しい方法

合法 (正しい)方法は shutdown を使用することです

sudo shutdown -h now
<ブロック引用>

shutdown は、システムを安全な方法で停止するように手配します。ログインしているすべてのユーザーに、システムがダウンしていることが通知されます...

しかし -h now そんなに多くのことをするのに十分な時間はありません...

もう少し 、別名物語、第II章
むかしむかし、UNIX の人々の上空からいくつかの論理的なステップが感じられました:

<ブロック引用>

システムプロセスが強制終了され、ファイルシステムがアンマウントされると、システムは自動的に停止/電源オフまたは再起動します。これは、halt または reboot コマンドを使用して行われます。このコマンドは、変更をディスクに同期してから、実際の停止/電源オフまたは再起動を実行します。

実際、今日では、Linux の世界 の 3 つのモイライの存在はもはや信頼されていません。 、 reboot ,poweroffhalt :現代科学 ls -l $(which poweroff halt reboot) の そして man reboot のもの 、この暗黒時代に新たな光を広げ、すべてのオプションを解析する唯一の真のコマンドが存在することを明らかにし、最終的にコマンド名と矛盾するアクションを自由に要求できるようにします! (halt -p または reboot -p poweroff の場合 、 shutdown -r reboot の場合 ...)

すべてが明確になり、すべての人にとって居心地が良いように見えた今、噂では冥界systemd ツールセットの 革命が行われ、世界全体が気づかないままになりました . 下位互換性シムのおかげで 再起動、電源オフ、停止、さらには telinit とシャットダウンでさえ、すべてがすでに新しい王 systemctl にバインドされていることにまったく気づきませんでした。もう息ができないのでJdeBP The Bardのオリジナルボイスで全編を聞いてください。

あなたが Ubuntu カルトの信奉者なら、これらすべての主張をしばらくの間まだ認識しているかもしれません。

halt -fの中つ国 、 inittelinitsystemctl
正しいものよりも早く解決策を探すが、同様に賢明である.

systemctl --force --force poweroff  # the most close to kill -9 1 
systemctl --force poweroff          # rough but still safe
sudo halt -f                                       # rough
sudo telinit 0        # or 6                       # safe
kill -SIGINT 1        # cause reboot   as the reboot command
kill -SIGRTMIN+4 1    # cause shutdown as the halt command

あなたがsystemdの下にいるかどうかに関係なく、正しいシャットダウン手順をすべて呼び出すことなく(そしてより速く)コンピューターを停止できるはずです:

<オール>
  • halt -f :オプション -f の指定 (-f が必要であることに注意してください シャットダウン手順を回避するには) 上記のコマンドで、sudo poweroff -f を使用して または多分 sudo reboot -f -h でも .確かに man reboot から読み取ることができます (および同等のもの) オプション -f を指定する必要性について シャットダウンを呼び出さないようにするには:

    <ブロック引用>

    --force で呼び出された場合 または、ランレベル 0 または 6 の場合、このツールは、reboot(2) システム コール自体を (REBOOTCOMMAND 引数を渡して) 呼び出し、システムを直接再起動します。 .

    それ以外の場合は、shutdown(8) ツールを呼び出すだけです REBOOTCOMMAND 引数を渡さずに適切な引数を使用してください。

    -f, --force
    shutdown(8) を呼び出さず、代わりに 名前から期待される実際のアクションを実行します .

  • さらに、 telinit を使用できます (または init 直接)

    sudo telinit 0    # or 6
    

    ランレベルを変更するように init に指示します...しかし、そうであれば、なぜそれを直接 kill しないのでしょうか?

  • systemd では unwise double オプション --force --force を使用できます

    systemctl --force --force poweroff  
    

    systemctl マニュアルを読む

    <ブロック引用>

    -f, --force
    enable とともに使用すると、既存の競合するシンボリック リンクを上書きします。
    halt で使用する場合 、 poweroffreboot または kexec で、すべてのユニットをシャットダウンせずに、選択した操作を実行します。ただし、すべてのプロセスが強制終了され、すべてのファイル システムが読み取り専用でアンマウントまたは再マウントされます。したがって、これは抜本的ではありますが、即時の再起動を要求するための比較的安全なオプションです。 これらの操作に --force を 2 回指定すると、プロセスを終了したり、ファイル システムをアンマウントしたりすることなく、すぐに実行されます。 警告:これらの操作で --force を 2 回指定すると、データが失われる可能性があります。

  • Ps>テールJdeBP The Bardからバリアントについてインスピレーションを得てください.


    root として /proc/sysrq-trigger に「o」を書き込むことで、ディスクを同期せずにマシンの電源をすぐに切ることができます。

    シェル スクリプトとしては、次のようになります

    #!/bin/sh
    echo o >/proc/sysrq-trigger
    

    /proc/sysrq-trigger に対する権限がある場合は、sysctl で有効にする必要はありません。このオプションは、キーボードによるトリガーにのみ影響します。

    後で読み取りたいファイルシステムがあるマシンでこれを行うことはお勧めしません。

    私はこれを Google Compute Engine で使用して、テンプレート化されたインスタンスを 10 分前に削除し、クラスター ジョブの費用対効果を最大化しています。これはうまく機能します。


    Linux
    1. Linuxでシャットダウンおよび再起動コマンドを無効にする方法

    2. LVMを使用してLinuxで物理ボリュームを作成する方法

    3. コマンドラインを使用してLinuxをシャットダウンまたは再起動する方法

    1. 再起動せずにUdevルールをリロードする方法は?

    2. Linux –再起動せずに70-persistent-net.rulesを再生成する方法は?

    3. Linuxをシャットダウンまたは再起動する方法

    1. コマンドラインを使用してLinuxを再起動する方法

    2. Nagios を使用してネットワーク スイッチとポートを監視する方法

    3. Ansibleを使用してサーバーの再起動を待つ方法は?