#Когда возникает ошибка в Debian и какие условия важны
Служба Debian перестала запускаться автоматически после переноса её рабочего каталога, например из /var/lib/app в /srv/app. Перенос меняет путь, владельца, зависимость от монтирования и возможные ограничения systemd; ручной запуск под администратором ничего не доказывает.
#Причины и как отличить их друг от друга
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Старый путь остался в ExecStart или WorkingDirectory | systemctl cat ссылается на несуществующий каталог. | Сопоставить unit и фактический новый путь. |
| Права каталога не подходят пользователю службы | namei показывает закрытый родительский каталог после переезда. | Выдать минимальный доступ вместо chmod 777. |
| Новый диск монтируется позже запуска | findmnt после загрузки видит ресурс, но журнал сервиса сообщает ENOENT. | Проверить mount-зависимости и порядок старта. |
#Пошаговая диагностика и устранение
- 1. Узнайте, какая служба должна использовать каталогОткройте терминал Debian, получите имя службы из сообщения приложения и покажите её статус. По ошибкам No such file or directory и Working directory проверьте точный ожидаемый путь, а не делайте обратный перенос без фиксации текущего состояния.
- Чтение данных и диагностикаLinux · Терминал (Bash)КомандаЧтение данных и диагностика. Изменений нет.
systemctl status ИМЯ.service --no-pagerjournalctl -b -u ИМЯ.service --no-pager -n 100
- 2. Сверьте старый и новый пути во всех полях unitС помощью systemctl cat найдите ExecStart, WorkingDirectory, EnvironmentFile, ReadWritePaths, StateDirectory, BindPaths. Если unit установлен из пакета Debian, его основной файл в /lib или /usr/lib не изменяйте напрямую; локальные правки должны жить в /etc/systemd/system через drop-in.Linux · Терминал (Bash)КомандаЧтение данных и диагностика. Изменений нет.
systemctl cat ИМЯ.servicesystemctl show ИМЯ.service -p WorkingDirectory -p ExecStart -p User
- 3. Проверьте новую точку монтированияЕсли перенос был на отдельный диск, посмотрите findmnt -T на новом пути и /etc/fstab. Каталог может существовать в корне до монтирования и скрывать случайно созданные там файлы. Не запускайте сервис, который может писать в пустой резервный каталог.Linux · Терминал (Bash)КомандаЧтение данных и диагностика. Изменений нет.
findmnt -T /srv/appfindmnt --fstab --evaluatels -ld /srv/app
- 4. Сверьте права владельца и родительских каталоговИспользуйте namei -l и stat на пути данных. Если сервис работает от отдельного пользователя, он должен проходить все родительские каталоги и читать/писать только нужные объекты. Не исполняйте chown -R на /srv и не давайте миру права записи.Linux · Терминал (Bash)КомандаЧтение данных и диагностика. Изменений нет.
namei -l /srv/appstat -c "%U %G %a %n" /srv/app
- 5. Сохраните и исправьте только ваш параметр запускаДо изменения unit запишите вывод systemctl cat. Затем в sudo systemctl edit меняйте только подтверждённый путь, обычно WorkingDirectory или EnvironmentFile; для собственной службы допустимо отдельно прописать зависимость от диска через RequiresMountsFor после проверки фактической файловой системы.Linux · Терминал (Bash)С осторожностьюНужен sudoЕсли редактор открыл пустую конфигурацию, не вставляйте неизвестные параметры.
sudo systemctl edit ИМЯ.servicesystemctl cat ИМЯ.serviceКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Проверяйте unit и монтирование до включения задачиКоманда systemd-analyze verify укажет ошибки синтаксиса и отсутствующие зависимости. Проверяйте mount после согласованной загрузки; если диск поздно появляется, сначала решите вопрос монтирования, а не добавляйте произвольные задержки sleep к ExecStart.Linux · Терминал (Bash)КомандаЧтение данных и диагностика. Изменений нет.
systemd-analyze verify ИМЯ.servicefindmnt -T /srv/app
- 7. Перезапустите и проверьте реальную запись или чтениеПосле копии данных и согласованного окна выполните restart только этой службы. Убедитесь, что процесс обращается к новому каталогу и в его журнале нет отказов. После будущей перезагрузки повторите проверку, иначе проблема может сохраниться только при раннем старте.
- Перезапуск может прервать подключённых пользователейLinux · Терминал (Bash)С осторожностьюНужен sudoПерезапуск может прервать подключённых пользователей.
sudo systemctl restart ИМЯ.servicesystemctl status ИМЯ.service --no-pagerjournalctl -u ИМЯ.service -b --no-pager -n 50Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Проверка результата и действия при неуспехе
Успех — сервис Debian использует нужный каталог при обычном автоматическом старте и после перезагрузки, не создавая потерянные файлы в скрытой точке монтирования.