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"를 다시 실행하면 예상한 대로 정확하게 드라이브 잠금이 해제됩니다.

또한 유형을 "단순"으로 변경해 보았지만 역시 작동하지 않았습니다. 나는 내가 하고 있는 일에 원샷이 옳다고 믿습니다.

이것은 데비안 11.3에 있습니다. 오늘 새로 설치했습니다.

ExecStop이 시작될 때마다 트리거되는 이유는 무엇입니까?

답변1

StopWhenUnneeded=true이 동작은 단위 섹션의 설정 으로 인해 발생할 가능성이 높습니다 . ~에 따르면맨페이지, 불필요한 정의는 다음과 같습니다.

StopWhenUnneeded=

부울 매개변수를 사용합니다. true인 경우 장치는 더 이상 사용되지 않을 때 중지됩니다. 수행할 작업을 최소화하기 위해 systemd는 다른 유닛과 충돌하거나 사용자가 명시적으로 종료를 요청하지 않는 한 기본적으로 유닛을 중지하지 않습니다.이 옵션을 설정하면 다른 활성 셀에서 이를 필요로 하지 않는 경우 셀이 자동으로 정리됩니다.. 기본값은 거짓입니다.

다른 단위는 이 사용자 정의 단위에 의존하지 않으므로 systemd는 일단 시작되면 이를 중지합니다.

관련 정보