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=
デバイスを起動する前に、指定した条件が真であることを確認してください。それ以外の場合は、デバイスの起動をスキップしますが、すべての順序の依存関係は依然として尊重されます。エラー状態のため、デバイスはエラー状態に切り替わりません。待機中の開始ジョブの実行中に条件を確認してください。
それが価値がある場合は、次を選択しますConditionPathIsMountPoint=
。
ConditionPathIsMountPoint=
同様ConditionPathExists=
ですが、特定のパスが存在し、マウントポイントであることを確認してください。