いくつかのハードウェアを制御するシステムサービスがあります。照明を例にしてみましょう。しばらくの間点灯しても安全なので、サービスを再起動するかコンピュータを再起動すると問題が解決します。
ただし、システムが停止(電源オフ)されている場合にのみ、一般的なクリーンアップ操作を実行するだけでなく、照明も消灯します。つまり、少し異なる方法でサービスを停止します。
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で直接インラインを確認できます。