Python WindowsLinuxmacOSPython 3

Python: Ошибка FileNotFoundError при запуске Python из службы

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

FileNotFoundError у Python-службы часто связан с относительным путём: рабочий каталог системной службы отличается от того, где разработчик запускает скрипт вручную.

В этой статье
  1. Что произошло и когда проявляется ошибка
  2. Причины и диагностические признаки
  3. Подробная пошаговая диагностика и исправление
  4. Как проверить, что проблема устранена
  5. Если исправление не помогло

#Что произошло и когда проявляется ошибка

FileNotFoundError у Python-службы часто связан с относительным путём: рабочий каталог системной службы отличается от того, где разработчик запускает скрипт вручную.

#Причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Используется относительный путьОткрытие относительного файла зависит от os.getcwd().Вручную config.json находится, в службе — нетСтроить путь относительно __file__ или задавать рабочую папку службы.
Файл не включён в развертываниеКонфигурация/данные не скопированы на сервер.Ошибка сохраняется даже при абсолютном путиПроверить наличие, права и путь перед запуском.
Служба запускается под другой учётной записьюБуквы дисков и домашние папки пользователя могут отсутствовать.Файл на сетевом диске доступен только вручнуюИспользовать доступный путь и права именно службы.

#Подробная пошаговая диагностика и исправление

  1. 1. Сохраните путь из tracebackНайдите последнюю строку FileNotFoundError: [Errno 2] ... и вызов open() выше неё. Если ошибка появилась после перезапуска службы, проверьте её рабочий каталог и учётную запись. Не записывайте содержимое конфигурации с секретами в журнал.
  1. 2. Выведите рабочий каталог и расположение скриптаВ тестовой копии поставьте короткую диагностику до чтения файла. Она покажет, где работает процесс и где лежит сама программа. Применимо к обычному .py-скрипту; в упакованном приложении расположение ресурсов может определяться иначе.
  2. Пример кода по теме
    Python
    Образец кода для файла .py в тестовой копии проекта; перед внедрением замените имена файлов на реальные.
    from pathlib import Path
    import os, sys
    print("cwd:", os.getcwd())
    print("script:", Path(__file__).resolve())
    print("python:", sys.executable)
  1. 3. Создавайте путь от файла программыЕсли config.json действительно лежит рядом со скриптом, открывайте его через Path(__file__).resolve().parent. Для структуры проекта с отдельной папкой config добавьте соответствующий сегмент, предварительно сверив реальное расположение.
  2. Пример кода по теме
    Python
    Образец кода для файла .py в тестовой копии проекта; перед внедрением замените имена файлов на реальные.
    from pathlib import Path
    config = Path(__file__).resolve().parent / "config.json"
    if not config.is_file():
        raise FileNotFoundError(f"Не найден файл конфигурации: {config}")
    text = config.read_text(encoding="utf-8")
  1. 4. Проверьте конфигурацию systemd или службы WindowsВ Linux откройте описание конкретного юнита в systemctl cat имя.service без изменения параметров. Проверьте WorkingDirectory= и ExecStart=; если нужна правка, сначала сделайте резервную копию, затем используйте отдельный drop-in через systemctl edit под администратором. В Windows найдите путь исполняемого файла в свойствах службы; назначайте абсолютные пути к данным в конфигурации приложения.
    Linux · Терминал (Bash)Команда
    Linux с systemd; замените имя службы, команда только читает конфигурацию и обычно не требует sudo.
    systemctl cat myapp.service
  1. 5. Проверьте файл и права под учётной записью службыУбедитесь, что конфигурация действительно существует и читается именно тем пользователем, от которого работает служба. Не исправляйте отсутствие файла массовым chmod 777 и не переносите секретную конфигурацию в общедоступный каталог. После изменения перезапустите службу по штатной процедуре и проверьте журнал запуска.

#Как проверить, что проблема устранена

При запуске службы config.json найден по предсказуемому пути, а приложение проходит этап чтения конфигурации.

#Если исправление не помогло

Если путь указывает на сетевое хранилище, отдельно проверяйте готовность сети и права учётной записи службы; «нет файла» и «нет прав» — разные неисправности.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.