Systemd to ExecStartは常に実行されますか?

Systemd to ExecStartは常に実行されますか?

リモートSSHサーバーからキーファイルを取得し、それを使用してルートドライブの代わりに暗号化されたLuksディスクをサーバーに自動的にマウントするsystemDサービスを作成します。

[Unit]
Description=Open encrypted data volume
After=network-online.target
Wants=network-online.target
StopWhenUnneeded=true

[Service]
Type=oneshot
ExecStart=/bin/sh -c '/etc/luks/key.sh | /sbin/cryptsetup -d - -v luksOpen /dev/disk/by-uuid/13b051b5-7f4f-4030-92da-d59f12422f40 Data_Crypt'
RemainAfterExit=true
ExecStop=/sbin/cryptsetup -d - -v luksClose Data_Crypt

これはうまくいくようですが、実行するたびに

systemctl start unlock-data.service

systemdログを確認すると、ドライブのロックが解除され、ロックされていることがわかります。 ExectStartとExecStopの両方が実行されています。 ExecStop行を完全に削除して「systemctl start」を再実行すると、予想通りにドライブのロックが解除されます。

また、型を「単純」に変更してみましたが、やはり動作しませんでした。私は私がやっていることにワンショットが正しいと信じています。

これは Debian 11.3 にあります。今日は新しくインストールしました。

ExecStopが起動されるたびにトリガーされるのはなぜですか?

ベストアンサー1

StopWhenUnneeded=trueこの動作は、単位セクションの設定によって発生する可能性が高くなります。 ~によるとマンページ、不要な定義は次のとおりです。

StopWhenUnneeded=

ブールパラメータを使用します。 trueの場合、デバイスは使用されなくなったときに停止します。実行する作業を最小限に抑えるために、systemdは他のユニットと競合するか、ユーザーが明示的にシャットダウンを要求しない限り、デフォルトではユニットを停止しません。このオプションを設定すると、他のアクティブセルでそれを必要としない場合はセルが自動的にクリーンアップされます。。デフォルトは偽です。

他の単位はこのカスタム単位に依存しないため、systemdは起動すると停止します。

おすすめ記事