systemd "oneshot"サービスがシャットダウンをトリガーします。

systemd "oneshot"サービスがシャットダウンをトリガーします。

Type=oneshotシステム停電を引き起こしたsystemdサービスを表示します。たとえば、これは次のsigpwr.target問題を回避するために使用できます。sigpwr.target作業モードで起動replace-irreversible

完了する前に、ワンショットサービスが終了していないことを確認してください。これにより表示エラーが発生する可能性があります。

  1. サービスが完了する前にsystemdがサービスを停止または終了する可能性のある順序はありますか?もしあれば、どのような影響を与えますか?
  2. もしそうなら、あなたのサービスも機能しますか?はい作業モードから始めますかreplace-irreversible

答え1

# trigger-poweroff.service
[Unit]
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --no-block poweroff

DefaultDependencies=no暗黙的に避けてくださいConflicts=shutdown.target。これは、サービスが作業モードで開始されるかどうかが重要ではないことを意味しますreplace-irreversibleWants=sysinit.targetたとえばemergency.target

Before=shutdown.targetsystemd-shutdownがシグナリングを開始する前に、サービスが完了していることを確認してください。他に何もない場合、これは単位の精度分析をより簡単にします。サービスが停電が完了するのを待たないようにして、デッドロックを防ぎます。

systemd-shutdownSIGTERMを使用してsystemctlプロセスを終了しても構いません。プロセスは単にステータスWIFSIGNALWTERMSIG終了しますSIGTERM。 Systemdはこれをクリーンで成功したシャットダウンと見なします。 SuccessExitStatusの定義を参照してくださいman systemd.exec。ただし、カーネルがsystemdより前にこの初期シャットダウンをスケジュールできない場合、DEFAULT_TIMEOUT_USECsystemd-shutdownはブロックできないシグナルSIGKILLを送信します。 Systemdはこれを正常終了として扱いません。

関連情報