IT-канал, просто о сложном
https://interface31.ru
Купить рекламу:
https://telega.in/c/interface31
Post #6003
2.16K

systemd.path – реагируем на события файловой системы
Как мы уже рассказывали systemd предоставляет администраторам простые, но в тоже время мощные инструменты на все случаи жизни.
Сегодня мы рассмотрим еще один тип юнита – path, который предназначен для контроля событий файловой системы. Сейчас он позволяет реагировать на создание, изменение или модификацию файлов или на появление файлов в директории.
Создадим для примера юнит
И внесем в него следующие строки:
В общем и целом, стандартный юнит, ничего необычного, кроме секции
Если секция Path не содержит директивы
Если требуется запуск другой службы, то ее требуется указать явно, т.е.:
Для начала работы юнит нужно запустить и добавить в автозагрузку:
Или одной командой:
В секции
Для отслеживания событий можно использовать следующие директивы:
▫️
▫️
▫️
▫️
▫️
Дополнительно с последней можно использовать:
▫️
Еще две опции позволяют задать временные лимиты срабатывания.
▫️
Отдельно следует отметить, что systemd.path работает только с локальными файловыми системами и не будет работать с SMB или NFS.
Как мы уже рассказывали systemd предоставляет администраторам простые, но в тоже время мощные инструменты на все случаи жизни.
Сегодня мы рассмотрим еще один тип юнита – path, который предназначен для контроля событий файловой системы. Сейчас он позволяет реагировать на создание, изменение или модификацию файлов или на появление файлов в директории.
Создадим для примера юнит
/etc/systemd/system/my_name.pathИ внесем в него следующие строки:
[Unit]
Description= Path test
[Path]
PathExists=/a/b/c/filename
[Install]
WantedBy=multi-user.target
В общем и целом, стандартный юнит, ничего необычного, кроме секции
Path, в директиве PathExists – путь, который мы отслеживаем.Если секция Path не содержит директивы
Unit, то будет найден и запушен одноименный сервис, т.е. my_name.service.Если требуется запуск другой службы, то ее требуется указать явно, т.е.:
[Path]
PathExists=/a/b/c/filename
Unit=123.service
Для начала работы юнит нужно запустить и добавить в автозагрузку:
systemctl start my_name.path
systemctl enable my_name.path
Или одной командой:
systemctl enable --now my_name.path
В секции
[Path] можно одновременно отслеживать несколько путей, запуск юнита произойдет при выполнении любого условия. Однако если хоть одно условие содержит пустую строку, то все директивы будут проигнорированы и юнит работать не будет.Для отслеживания событий можно использовать следующие директивы:
▫️
PathExists= проверяет существование файла▫️
PathExistsGlob= тоже самое, но позволяет использовать шаблоны подстановки▫️
PathChanged= проверяет изменение файла, срабатывает по окончанию редактирования▫️
PathModified= проверяет модификацию файла, срабатывает сразу, не дожидаясь окончания редактирования.▫️
DirectoryNotEmpty= проверяет появление файлов в директорииДополнительно с последней можно использовать:
▫️
MakeDirectory= при указании true каталог для отслеживания будет автоматически создан▫️ DirectoryMode= права на созданный каталог, по умолчанию 0755Еще две опции позволяют задать временные лимиты срабатывания.
▫️ TriggerLimitIntervalSec= юнит будет срабатывать не чаще указанного промежутка времени, по умолчанию 2 секунды.▫️
TriggerLimitBurst= количество активаций за указанное время, по умолчанию 200. Таким образом если произойдет более 200 срабатываний за 2 секунды, то юнит перейдет в режим сбоя не будет работать до перезапуска. Отдельно следует отметить, что systemd.path работает только с локальными файловыми системами и не будет работать с SMB или NFS.
- 👍 23
- ❤ 4
- 👌 2
- 🔥 1


















