Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
systemd Error: ConditionPathExists=/path/to/file failed for unit Linux / DevOps

systemd Error: ConditionPathExists failed for unit — Диагностика

Обновлено: 18.08.2026  ·  Официальная база знаний

Служба не стартует при загрузке или ручном вызове, не выдавая явного кода ошибки. В выводе systemctl status <unit> статус отображается как inactive (dead) с пометкой: ConditionPathExists=/path/to/file was not met или Starting was skipped because of an unmet condition.

Условие в Unit-файлеОжидаемое состояниеФактический результат
ConditionPathExists=/var/run/app.lockФайл должен существоватьФайл отсутствует — запуск отменен без ошибки
ConditionPathExists=!/etc/no-bootФайл НЕ должен существовать (инверсия !)Флаг-файл обнаружен — юнит пропущен
ConditionDirectoryNotEmpty=/dataКаталог содержит файлыКаталог пуст — отказ запуска
  • Команда systemctl start завершается успешно с кодом 0, но фоновый процесс фактически не появляется в системе.
  • В journalctl фиксируется пропуск: systemd[1]: Starting Service... was skipped because of an unmet condition.
  1. Проверьте список условий, прописанных в конфигурации юнита:
    systemctl cat <service_name> | grep Condition
  2. Проверьте существование целевого пути, прав доступа к нему и наличие точек монтирования:
    ls -la /path/to/required/file
    # Если путь содержит инверсию (!), убедитесь, что стоп-файл удален:
    ls -la /path/to/blocker/file
  3. Проверьте порядок монтирования: если путь находится на отдельном разделе или сетевом диске (NFS), добавьте зависимость от монтирования в блок [Unit]:
    RequiresMountsFor=/path/to/file
  4. При необходимости переопределите условие через drop-in файл:
    sudo systemctl edit <service_name>
    
    # В открывшемся окне сбросьте условие и задайте новое:
    [Unit]
    ConditionPathExists=
    ConditionPathExists=/new/correct/path/file
  5. Примените изменения конфигурации и выполните тестовый запуск:
    sudo systemctl daemon-reload
    sudo systemctl start <service_name>
Важно: Условия Condition* в systemd спроектированы так, чтобы не считать их невыполнение аварийным сбоем (юнит не переходит в статус failed). Это штатный механизм селективного запуска.
Практический опыт инженера: Типичный кейс: `systemd-firstboot.service` пропускается, если существует `/etc/machine-id`. Проверяйте флаги инверсии перед поиском багов в коде приложения.

Частые вопросы (FAQ)

Почему при невыполнении ConditionPathExists сервис не помечается как failed?

Потому что директивы Condition* являются условиями применимости, а не проверки работоспособности. Если условие ложно, systemd считает, что запуск службы в данной конфигурации хоста просто не требуется.

Как полностью сбросить ConditionPathExists в systemd override?

В секции [Unit] drop-in файла нужно указать пустую строку 'ConditionPathExists=', чтобы очистить предыдущие значения, а затем при необходимости задать новые.

Что означает восклицательный знак перед путем (ConditionPathExists=!/file)?

Восклицательный знак означает логическое отрицание (NOT). Юнит будет запущен только в том случае, если указанный файл НЕ существует на диске.

Как проверить, выполнились ли условия юнита, через CLI?

Используйте команду systemctl status <unit> — в строке conditions будет явно указан статус проверки каждого условия.