web-dev-qa-db-ja.com

`systemctl start reboot.target`と` systemctl reboot`の実際的な違いは何ですか?

start reboot.targetrebootの間には、文書化された2つの違いがあります。ただし、start reboot.targetctrl-alt-del.targetによってトリガーされるものです。

ctrl-alt-del.target--job-mode=replace-irreversiblyを省略しても問題ありませんか?これはどのような状況で異なる動作を引き起こしますか? systemctl rebootに含まれているのはなぜですか?

man systemctl

再起動[arg]

システムをシャットダウンして再起動します。これはstart reboot.target --job-mode=replace-irreversiblyとほぼ同等ですが、すべてのユーザーに壁のメッセージを出力します。

man systemd.special

ctrl-alt-del.target:コンソールでControl + Alt + Delが押されると、systemdはこのターゲットを開始します。通常、これはreboot.targetにエイリアス(シンボリックリンク)する必要があります。

4
sourcejedi

新しいジョブをキューに入れるとき、このオプションはすでにキューに入れられたジョブを処理する方法を制御します。 「失敗」、「置換」、「置換不可逆」、「分離」、「依存関係を無視」、「要件を無視」、または「フラッシュ」のいずれかをとります。デフォルトは「replace」ですが、isolateコマンドを使用して「分離」ジョブモードを意味する場合を除きます。

「失敗」が指定されており、要求された操作が保留中のジョブと競合する場合(具体的には、既に保留中の開始ジョブが停止ジョブに戻るか、またはその逆になる)、操作が失敗します。

「replace」(デフォルト)が指定されている場合、競合する保留中のジョブは必要に応じて置き換えられます。

「replace-不可逆」が指定されている場合、「replace」のように動作しますが、新しいジョブを不可逆としてマークします。これにより、将来の競合するトランザクションがこれらのジョブを置き換えないようにします(または、元に戻せないジョブがまだ保留されている間にキューに入れられることもありません)。取り消しできないジョブは、cancelコマンドを使用して取り消すことができます。

これは実用的な効果を示唆しています。 sleep.targetを使用して「ユニットをスリープ状態ロジックにフック」するとします。フックユニットにはDefaultDependencies=noがないため、sysinit.target...とConflictに依存します。 shutdown.target

systemctl start reboot.targetを実行してすぐにsystemctl start suspend.targetを実行すると、フックユニットがshutdown.targetを停止するようです。現在、systemd-reboot.serviceにはRequires=shutdown.targetがあるため、停止/キャンセルする必要もあります。 (umount.targetはキャンセルしないでください)。

私はこれらの行に沿って動作の違いを確認しました systemdの課題追跡で欠陥として報告しました

1
sourcejedi

reboot.targetファイルのソースを読み取ると、ctrl-alt-del.targetAlias=で参照されていることがわかります。つまり、同じコマンドの別の名前であり、同じように機能します。

systemctl.cのソースコードを見ると を見ると、systemctl rebootreplace-irreversiblyオプションを渡すこともわかります。

したがって、見つけたリブートコマンドの3つのバリエーションはすべて同じように機能するようです:systemctl rebootreboot.targetおよびctrl-alt-del.target

ドキュメントを改善する提案がある場合は、 systemdドキュメントのソースXMLファイル を変更して、プルリクエストを送信できます。

0
Mark Stosberg