我即将将rsync --delete
目录 /mnt/foo 的服务写入远程服务器。但是,由于--delete
选项的原因,除非安装了 /mnt/foo,否则我不想运行它,因为这可能会导致删除远程上的所有文件。
ConditionX
用什么(例如ConditionPathIsDirectory
)和指令来实现它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=
在启动设备之前,请验证指定的条件是否成立。如果不是 true,则将跳过单元的启动,但仍会遵守其所有排序依赖性。故障情况不会导致设备进入故障状态。在执行排队的启动作业时检查条件。
对于它的价值,我会选择ConditionPathIsMountPoint=
:
ConditionPathIsMountPoint=
类似于ConditionPathExists=
但验证某个路径是否存在并且是挂载点。