TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #915 1.13K
systemd.path: запуск действия при изменении файла

У systemd есть удобный механизм, о котором часто забывают - systemd.path. Он позволяет следить за событиями в файловой системе и запускать нужный .service, когда файл или каталог изменился.

Например:

изменился конфиг - перезапустить сервис
появился файл - запустить обработчик
обновился сертификат - скопировать его и сделать reload

▪️ Пример: реагируем на изменение конфига. Допустим, нужно выполнить действие при изменении файла:


/etc/daemon/daemon.conf


Создаем unit:


/etc/systemd/system/daemon.path
[Unit]
Description=Watch /etc/daemon/daemon.conf for changes

[Path]
PathModified=/etc/daemon/daemon.conf

[Install]
WantedBy=multi-user.target


Этот .path будет следить за изменением файла.

▪️ Сервис, который запустится по событию. Теперь создаем:


/etc/systemd/system/daemon.service



[Unit]
Description=Run action after daemon.conf change

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo "daemon config changed at $(date)" >> /etc/daemon/restart.date'


Для примера сервис просто пишет дату события в файл:


/etc/daemon/restart.date


На практике в ExecStart можно указать любой скрипт:

• перезапуск сервиса;
• reload nginx;
• копирование файла;
• отправка алерта;
• валидация конфига.

▪️ Включаем и запускаем


systemctl daemon-reload
systemctl enable --now daemon.path


Проверяем статус:


systemctl status daemon.path


Теперь изменяем файл:


echo "# test" >> /etc/daemon/daemon.conf


И смотрим результат:


cat /etc/daemon/restart.date


Должна появиться новая строка с текущей датой.

▪️ Почему это удобно. Главный плюс- все работает через systemd. Значит, события и ошибки можно смотреть привычно:


journalctl -u daemon.path
journalctl -u daemon.service


Не нужно писать отдельный бесконечный watcher на bash или городить cron.

▪️ Полезные директивы


[Path]
PathModified=/path/file


Срабатывает при изменении файла.


PathChanged=/path/file


Срабатывает после закрытия файла, в который была запись.


PathExists=/path/file


Срабатывает, когда файл или каталог появился.


PathExistsGlob=/path/*.conf


То же самое, но с маской.


DirectoryNotEmpty=/path/dir


Срабатывает, когда в пустом каталоге появился файл.

#linux #systemd

🧑‍💻 NetworkAdmin
  • 👍 6
More from @networkadminru
  1. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  2. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  3. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
  4. Sep 22, 2026🌚 watch: простая динамическая диагностика в терминале Иногда не нужен отдельный мониторин…
  5. Sep 21, 2026👌 Firewall default deny: как внедрять без внезапного отрезания доступа Идея простая: разр…
  6. Sep 18, 2026🖥 Windows зависла на "Подготовке Windows": как проверить состояние удаленно Типичная ситу…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →