Intereting Posts
В чем разница между консолью, оболочкой, терминалом, эмулятором терминала, терминальным мультиплексором и диспетчером окон? Проблемы с WiFi (драйвер Atheros) с FreeBSD 11 Как настроить выход журнала apache mod_sec? Использование команды break в качестве аргумента функции Размер кеша дисковой страницы в Linux для целей целостности httpd (apache2) сервер не анализирует * .php файлы, а отображает их как текст с установленным php-модулем в arch-linux Ввод текста из сценария оболочки Цветной вывод меньше при обращении к файлу журнала Crontab не работает или ошибка скрипта? Использование AWK для вычисления среднего значения и дисперсии столбцов сохранение расширенных атрибутов cp / rsync Автоматизация последовательности команд монтажа crontab не запускает один скрипт Как автоматизировать запись из шаблона в нескольких файлах в зависимости от разных входов со сценарием? Любой способ отправить только «\ n» в Telnet?

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 

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