Type=oneshot
システム停電を引き起こしたsystemdサービスを表示します。たとえば、これは次のsigpwr.target
問題を回避するために使用できます。sigpwr.target
作業モードで起動replace-irreversible
。
完了する前に、ワンショットサービスが終了していないことを確認してください。これにより表示エラーが発生する可能性があります。
- サービスが完了する前にsystemdがサービスを停止または終了する可能性のある順序はありますか?もしあれば、どのような影響を与えますか?
- もしそうなら、あなたのサービスも機能しますか?はい作業モードから始めますか
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-irreversible
。Wants=sysinit.target
たとえばemergency.target
。
Before=shutdown.target
systemd-shutdownがシグナリングを開始する前に、サービスが完了していることを確認してください。他に何もない場合、これは単位の精度分析をより簡単にします。サービスが停電が完了するのを待たないようにして、デッドロックを防ぎます。
systemd-shutdown
SIGTERMを使用してsystemctlプロセスを終了しても構いません。プロセスは単にステータスWIFSIGNAL
とWTERMSIG
終了しますSIGTERM
。 Systemdはこれをクリーンで成功したシャットダウンと見なします。 SuccessExitStatusの定義を参照してくださいman systemd.exec
。ただし、カーネルがsystemdより前にこの初期シャットダウンをスケジュールできない場合、DEFAULT_TIMEOUT_USEC
systemd-shutdownはブロックできないシグナルSIGKILLを送信します。 Systemdはこれを正常終了として扱いません。