systemd.unit `RequiresMountsFor=` 및 `ConditionPathIsDirectory=`

systemd.unit `RequiresMountsFor=` 및 `ConditionPathIsDirectory=`

rsync --delete/mnt/foo 디렉토리에서 원격 서버로 서비스를 작성 하려고 합니다 . 그러나 옵션 때문에 --delete/mnt/foo가 마운트되지 않는 한 실행하고 싶지 않습니다. 이렇게 하면 원격지에 있는 모든 파일이 삭제될 수 있기 때문입니다.

ConditionXConditionPathIsDirectory이를 구현하는 데 사용되는 지침은 무엇이며(예 : ) RequiresMountsFor=, 차이점은 무엇입니까(각각의 장점과 단점)?

초안: 이것은 나의 현재 스케치입니다.

RequiresMountsFor=/mnt/foo

그리고

# assuming there is `bar_only_on_foo` subdirectory on monted directory, which does not exis on unmounted one.
ConditionPathIsDirectory=/mnt/foo/bar_only_on_foo

파일 에 추가 .service:

# /etc/systemd/system/rsync_to_remotey.service
# or : /home/$USER/.config/systemd/user/rsync_to_remotey.service
[Unit]
Description=rsync USER X data to REMOTE Y

[Service]
Type=simple
ExecStart=/home/USERX/rsync_userx_to_remotey.sh

.timer정확성을 위해 문서 는 다음과 같습니다 .

# /etc/systemd/system/rsync_to_remotey.timer
# or : /home/$USER/.config/systemd/user/rsync_to_remotey.timer
[Unit]
Description=Runs every 30 minutes rsync USER X data to REMOTE Y

[Timer]
OnBootSec=30min
AccuracySec=1h
OnCalendar=*:0/30
Unit=rsync_to_remotey.service

[Install]
WantedBy=multi-user.target

답변1

나는 또한 설명을 찾고 있었고 최근 Raspberry Pi Jessie 이미지의 맨 페이지에서 설명을 제공했습니다.

먼저 여기를 살펴보겠습니다. man 7 systemd 그런 다음 다음을 살펴보겠습니다. man 5 systemd.unit

다음 콘텐츠가 제공됩니다.

RequiresMountsFor=

공백으로 구분된 절대 경로 목록입니다. 지정된 경로에 액세스하는 데 필요한 설치된 모든 장치의 유형 Requires=과 종속성을 자동으로 추가합니다.After=

noauto로 표시된 마운트 지점은 자동으로 마운트되지 않으며 이 옵션의 목적에 따라 무시됩니다. 장치에 이러한 설치가 필요한 경우 설치된 장치( Requires=및/ After=또는 다른 조합)에 직접 종속성을 추가할 수 있습니다.

맨 페이지 아래로 더 내려가면,

ConditionArchitecture=,,,,,,,,,,,,,,,,,,,,,,,,,,,ConditionVirtualization=ConditionHost=ConditionKernelCommandLine=ConditionSecurity=ConditionCapability=ConditionACPower=ConditionNeedsUpdate=ConditionPathExists=ConditionPathExistsGlob=ConditionPathIsDirectory=ConditionPathIsSymbolicLink=ConditionPathIsMountPoint=ConditionPathIsReadWrite=ConditionDirectoryNotEmpty=ConditionFileNotEmpty=ConditionFileIsExecutable=ConditionNull=

장치를 시작하기 전에 지정된 조건이 참인지 확인하십시오. 그렇지 않은 경우 장치 시작을 건너뛰지만 모든 순서 종속성은 여전히 ​​존중됩니다. 오류 상태로 인해 장치가 오류 상태로 전환되지는 않습니다. 대기 중인 시작 작업을 실행하는 동안 조건을 확인하세요.

그만한 가치가 있는 경우 다음을 선택합니다 ConditionPathIsMountPoint=.

ConditionPathIsMountPoint=유사 ConditionPathExists=하지만 특정 경로가 존재하고 마운트 지점인지 확인합니다.

관련 정보