#Что происходит и когда это важно
В systemctl status/журнале ошибка Failed to load environment files или No such file or directory до запуска приложения. Отсутствующий файл с префиксом - обычно не блокирует запуск.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Неверный путьВ EnvironmentFile= оставлен путь старой установки. | ls -l сообщает No such file or directory. | Сверить место, не создавать пустой файл вслепую. |
| Недоступен файлУ пользователя/системного менеджера нет необходимого доступа. | Журнал содержит permission denied. | Проверить права минимально и без расширения всем. |
| Файл необязательныйПриложение не требует окружения, но unit объявляет его обязательным. | В старой конфигурации ожидался необязательный файл. | Согласовать префикс - только для действительно необязательного файла. |
#Пошаговая диагностика и исправление
- Уточните полное сообщениеОткройте Терминал и выполните
systemctl status ИМЯ.service --no-pagerиjournalctl -u ИМЯ.service -b --no-pager. Запишите путь из EnvironmentFile, но не публикуйте содержимое файла: там могут быть пароли и ключи. - Найдите действующую строку конфигурацииВыполните
systemctl cat ИМЯ.serviceи найдитеEnvironmentFile=во всех основных файлах и drop-in. Путь в директиве должен быть абсолютным, а начальный дефис означает «не считать отсутствие ошибкой». Не путайте сWorkingDirectory=. - Проверьте существование, не раскрывая секретовВыполните
ls -ld /ПОЛНЫЙ/ПУТЬ/К/ФАЙЛУс настоящим путём из unit. Посмотрите, существует ли файл и какие у него права. Не используйтеcatдля содержимого в общедоступном терминале или журнале, поскольку окружение может содержать секреты. - Уточните, куда перемещены параметрыВ документации развёртывания приложения найдите новый путь. Если файл действительно находится в другом каталоге, сначала сохраните существующий unit и копию файла настроек, не копируя его на общий ресурс. Учтите, что ошибочный файл может относиться к другой инсталляции с другими секретами.
- Сделайте адресное переопределениеДля собственного сервиса администратор использует
sudo systemctl edit ИМЯ.service. Если нужно заменить существующую директиву, в секции[Service]сначала запишите пустоеEnvironmentFile=, затемEnvironmentFile=/НОВЫЙ/ПУТЬ(путь заменить на настоящий). Префикс-перед путём используйте только если файл действительно необязателен. Сохраните правку и выход из редактора. - Примените и проверьте конфигурациюПосле сохранения выполните
sudo systemctl daemon-reload,systemctl cat ИМЯ.service, затем согласованноsudo systemctl restart ИМЯ.service. Проверьте статус и журнал; если приложение теперь жалуется на отсутствующую переменную, посмотрите документацию самой программы, не показывая секретные значения. - Верните старое состояние при ошибкеЕсли проблема появилась после правки, отмените только созданное вами переопределение, восстановив прежний вариант из резервной копии. После этого снова выполните daemon-reload и согласованный рестарт; не удаляйте все drop-in других администраторов.
#Команды из инструкции с пояснениями
systemctl cat ИМЯ.servicels -ld /ПОЛНЫЙ/ПУТЬ/К/ФАЙЛУsudo systemctl daemon-reloadКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Служба стартует и читает требуемые переменные из правильного файла; ошибка EnvironmentFile исчезла, а секреты не стали публично доступны.
#Если проблема не устранена
Если файл есть, а доступ запрещён, передайте специалисту путь, права файла (без содержимого) и пользователя службы. Не изменяйте chmod на 777.