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=ですが、特定のパスが存在し、マウントポイントであることを確認してください。

関連情報