BindPaths=
나는 systemd를 사용하여 Debian 8 시스템에서 이 지시문이 어떻게 작동하는지 테스트하려고 합니다 .
현재 서비스에 대한 기본 단위 파일이 있습니다.
[Unit]
Description="Simple Test Service"
BindPaths=/path:/bindmount/path:norbind
[Service]
ExecStart=/usr/bin/long_running_program --flags
Restart=always
[Install]
WantedBy=multi-user.target
findmnt
서비스 시작 전후에 실행을 해보니 /bindmount/path
바인드 마운트가 전혀 나열되지 않습니다.
마운트 위치를 바인딩 ls
하거나 바인딩 하면 .ls -a
/bindmount/path
/path
예상대로 작동하지 않는 이유는 무엇입니까?
나systemd BindPath= 매뉴얼 페이지를 참조하십시오.그것은 말한다:
이 옵션은 시스템 서비스에만 적용되며 Service Manager의 사용자별 인스턴스에서 실행되는 서비스에는 지원되지 않습니다.
Service Manager의 사용자별 인스턴스에서 실행 중인지, 아니면 시스템 서비스를 실행 중인지 어떻게 알 수 있나요? 내 서비스가 /etc/systemd/system
vs에 있는지 여부에 따라 결정되나요 /lib/systemd/system
?
답변1
이 BindPaths
옵션을 사용하면 장치에서 실행 중인 프로세스에 파일이 표시됩니다. 이는 서비스를 시작하기 위해 명령을 입력하는 셸에서는 전혀 표시되지 않습니다. 어떤 파일 시스템이 마운트되었는지 언제든지 확인할 수 있지만 /proc/mounts
BindPaths를 사용하여 서비스를 실행하는 경우 파일 시스템이 올바르게 마운트되었는지 확인하는 유일한 방법은 다음을 확인하는 것입니다./proc/
서비스 PID/mounts
. 후자는 프로세스가 마운트한 파일 시스템 목록입니다.
마지막 질문에 관해서: /lib/systemd/system
모든 일반 유닛 파일을 포함하는 동시에 /etc/systemd/system
사용자 정의 유닛 파일과 유닛 간의 모든 종속성도 포함합니다. 각 사용자 인스턴스는 systemctl --user
홈 디렉터리 트리의 단위 파일을 사용하여 실행하고 참조합니다.