systemd.unit `RequiresMountsFor =` vs `ConditionPathIsDirectory =`

Я собираюсь написать службу rsync --delete directory / 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 

  • Как узнать, какая команда выполняется файлом systemd .timer?
  • Есть ли способ узнать, когда будет запускаться системный таймер?
  • Предотвращение запуска таймера systemd при запуске
  • Ошибка анализа на блоке таймера systemd. Неверная документация?
  • «Systemctl list-timers» показывает последние выполненные даты, которые далеки в будущем
  • Таймер Systemd, срок действия которого истек
  • системный таймер каждые 2 часа через 30 минут после часа?
  • Cron vs systemd таймеры
  • One Solution collect form web for “systemd.unit `RequiresMountsFor =` vs `ConditionPathIsDirectory =`”

    Я также искал объяснения, и man-страницы на недавнем изображении малины 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= но проверяет, существует ли определенный путь и является точкой монтирования.

    Interesting Posts

    Использование Gparted и установка Windows 10 после Linux

    Как получить часть строк из всех .txt-файлов в каталоге?

    Разбиение pdf-файла на 2 pdf (один разравнивающий равные страницы и т. Д.)

    Добавление строки в таблицу

    Как выполнить grep на 'man unix_command'?

    Sed / awk / perl: порядок реверсирования значений, разделенных запятыми, сохранение другого текста

    Добавить всех пользователей в одну группу в другую группу?

    В pfSense каковы значения столбцов «Целевые категории» и «Целевые категории для нерабочего времени» на экране ACL групп?

    pkg2ng бросает много ошибок об неизвестных ключевых словах

    Защита устройств от команд dd и fdisk

    Двойная загрузка Debian и Windows 10: загрузка в Windows 10 без меню для выбора ОС

    Подстановочный знак в файле / etc / hosts

    Как использовать fslint (в частности findnl) в командной строке, чтобы реально имитировать поведение fslint-gui?

    В чем разница между «rm» и «unlink»?

    Удаление косой черты / родительских путей из имен файлов внутри CSS и содержимого Javascript

    Linux и Unix - лучшая ОС в мире.