systemdサービスは、システムがすぐにシャットダウンすることをどのように検出しますか?

systemdサービスは、システムがすぐにシャットダウンすることをどのように検出しますか?

いくつかのハードウェアを制御するシステムサービスがあります。照明を例にしてみましょう。しばらくの間点灯しても安全なので、サービスを再起動するかコンピュータを再起動すると問題が解決します。

ただし、システムが停止(電源オフ)されている場合にのみ、一般的なクリーンアップ操作を実行するだけでなく、照明も消灯します。つまり、少し異なる方法でサービスを停止します。

ExecStopコマンドは、前述のすべての状況(サービスの再起動、再起動、停止)で同じ方法で実行されます。このような状況をどのように区別するのか、systemdの電源が切れたのかを知ることはできますか?

ベストアンサー1

出力を調べてシステムの状態を確認できることがわかりました。

systemctl is-system-running      # See man 1 systemctl for more info

あなたの場合は、照明を消す部分を次のように梱包することをお勧めします。

if [[ "$(systemctl is-system-running || true)" == "stopping" ]]; then
    # RUN THE COMMANDS OR EXECUTABLES FOR TURNING OFF THE LAMP HERE
fi

もちろん、別のラッパー(例:)を維持したくない場合は、ExecStop=sh -c 'if ... fiいつでもExecStopで直接インラインを確認できます。

おすすめ記事