SystemdDoctor
служба не работает path конфигурация

Path-unit не реагирует на изменения

Unit вида .path следит за путём и запускает службу при событии. Если ничего не происходит, обычно включена только служба, наблюдение задано не за тем объектом, или служба уже активна и запускать её не нужно.

Что это значит

Важная тонкость: PathExists= срабатывает, когда файл есть, и повторно не сработает, пока файл не исчезнет. Для обработки потока файлов нужен DirectoryNotEmpty= — он срабатывает снова, пока каталог не пуст.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. В автозапуск включена служба, а не path-unit

    Наблюдение ведёт .path, и включать нужно его. Служба ждёт вызова и сама ничего не отслеживает.

  2. Наблюдение задано не за тем объектом

    PathChanged= для каталога срабатывает на изменения самого каталога, а не файлов внутри. Для содержимого нужен PathModified= или DirectoryNotEmpty=.

  3. Служба уже активна

    Если служба работает, событие ничего не даёт: запускать нечего. При RemainAfterExit=yes она остаётся активной после отработки и больше не вызывается.

  4. Путь недоступен для наблюдения

    Каталога нет, или он на файловой системе без поддержки уведомлений ядра (часть сетевых файловых систем). Тогда события не приходят.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Все наблюдатели и их состояния.

systemctl list-units --type=path --no-pager

За чем следит unit и что запускает.

systemctl show myapp.path -p Paths -p Unit

События наблюдателя и запуски службы рядом.

journalctl -u myapp.path -u myapp.service -n 30 --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. В автозапуск включена служба, а не path-unit
Почему происходит
Наблюдение ведёт .path, и включать нужно его. Служба ждёт вызова и сама ничего не отслеживает.
Как проверить
Посмотрите состояния включения.
systemctl is-enabled myapp.path myapp.service
systemctl status myapp.path --no-pager | head -8
Как исправить
Включите наблюдатель, а не службу: в автозапуске должен быть path-unit, он и вызовет службу по событию.
sudo systemctl enable --now myapp.path
2. Наблюдение задано не за тем объектом
Почему происходит
PathChanged= для каталога срабатывает на изменения самого каталога, а не файлов внутри. Для содержимого нужен PathModified= или DirectoryNotEmpty=.
Как проверить
Посмотрите параметры наблюдения.
systemctl show myapp.path -p Paths
Как исправить
Выберите подходящий параметр: DirectoryNotEmpty= для очереди файлов, PathModified= для изменяемого файла.
[Path]
DirectoryNotEmpty=/var/spool/myapp
3. Служба уже активна
Почему происходит
Если служба работает, событие ничего не даёт: запускать нечего. При RemainAfterExit=yes она остаётся активной после отработки и больше не вызывается.
Как проверить
Посмотрите состояние службы.
systemctl show myapp.service -p RemainAfterExit -p ActiveState
Как исправить
Уберите RemainAfterExit=yes у вызываемой задачи: она должна завершаться, чтобы следующее событие её запустило.
4. Путь недоступен для наблюдения
Почему происходит
Каталога нет, или он на файловой системе без поддержки уведомлений ядра (часть сетевых файловых систем). Тогда события не приходят.
Как проверить
Проверьте путь и тип файловой системы.
ls -ld /var/spool/myapp
findmnt -T /var/spool/myapp -o TARGET,FSTYPE
Как исправить
Создайте каталог (можно через MakeDirectory=yes в unit) и следите за путём на локальной файловой системе.

Пример вывода

Наблюдатель активен, но служба ни разу не запускалась. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

● myapp.path - Watch spool directory
     Loaded: loaded (/etc/systemd/system/myapp.path; enabled; preset: enabled)
     Active: active (waiting) since Mon 2026-09-15 09:00:02 MSK; 3h ago

○ myapp.service - Process spool
     Loaded: loaded (/etc/systemd/system/myapp.service; static)
     Active: inactive (dead)

Связанные ошибки

Источники

  • systemd.path(5)
    PathExists=, PathChanged=, PathModified=, DirectoryNotEmpty=, MakeDirectory=.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Проверено на каталоге очереди: PathExists срабатывает однократно, DirectoryNotEmpty — пока есть файлы.
    собственная проверка, systemd 255
    сверено 15 сентября 2026