Rocky Linux Rocky Linux

Rocky Linux: после переезда каталога не выполняется автоматический запуск

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

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

Путь приложения изменился, но unit, каталоги состояния и метки SELinux могли остаться прежними. Нужно найти конкретный старый путь и исправить его, не отключая механизмы безопасности.

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

#Когда возникает проблема и к каким системам относится

Путь приложения изменился, но unit, каталоги состояния и метки SELinux могли остаться прежними. Нужно найти конкретный старый путь и исправить его, не отключая механизмы безопасности. Rocky Linux с systemd: после переноса рабочего каталога или бинарника сервис перестал автоматически запускаться.

#Основные причины: как отличить одну от другой

Возможная причинаКак узнатьЧто делать
В unit сохранён старый путьExecStart/WorkingDirectory указывает на прежний каталогкод 203/EXEC либо 200/CHDIRОбновить unit через drop-in с правильным абсолютным путём
SELinux маркирует новый каталог иначеФайл доступен обычными правами, но AVC запрещает исполнениеaudit показывает deniedНазначить корректный контекст по назначению
Не найден файл средыEnvironmentFile ссылается на прошлый адресsystemctl status сообщает Failed to load environment filesИсправить один параметр и права

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

  1. Шаг 1. Установите точное имя отказавшей службыВ терминале посмотрите сбой и время возникновения. Факт, что файл программы существует в новой папке, не означает, что unit знает о переносе.
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    UNIT="имя.service"
    systemctl status "$UNIT" --no-pager
    journalctl -b -u "$UNIT" --no-pager -n 80
  1. Шаг 2. Прочитайте все параметры и drop-in unitОсобенно важны ExecStart, WorkingDirectory, EnvironmentFile, RootDirectory, StateDirectory и RequiresMountsFor. Редактирование /usr/lib/systemd/system рискованно из-за обновлений, поэтому сохраняйте изменения в /etc/systemd/system с помощью systemctl edit.
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    UNIT="имя.service"
    systemctl cat "$UNIT"
    systemctl show "$UNIT" -p ExecStart -p WorkingDirectory -p EnvironmentFiles
  1. Шаг 3. Проверьте доступность нового путиВставьте настоящий новый каталог; namei -l проверит всю цепочку разрешений, а ls -lZ покажет контекст. Если исполняемый файл запускается от User=, проверьте доступ именно этого пользователя.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    NEW="/srv/новое-приложение"
    namei -l "$NEW"
    ls -ldZ "$NEW"
  1. Шаг 4. Найдите явную ошибку перехода по каталогуПри отсутствии программы возможен status=203/EXEC; при несуществующем WorkingDirectory — 200/CHDIR. Это разные случаи. Если при тесте вручную всё работает, в службе могут отсутствовать переменные среды.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    UNIT="имя.service"
    systemctl show "$UNIT" -p User -p ExecStart -p WorkingDirectory
    journalctl -b -u "$UNIT" --no-pager | tail -50
  1. Шаг 5. Проверьте SELinux на новом путиЕсли AVC точно относится к службе и файлу, проверьте, что restorecon считает правильным контекстом. Если приложение перенесено в нестандартный каталог, понадобится документированное правило fcontext через semanage, а не ручная метка без постоянной политики.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)КомандаНужен sudo
    Терминал Rocky Linux; нужны административные права. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    getenforce
    NEW="/srv/новое-приложение"
    sudo restorecon -n -v "$NEW"
    command -v ausearch && sudo ausearch -m AVC -ts recent | tail -25 || true
  1. Шаг 6. Измените адрес только через штатное переопределениеЗаранее сохраните unit и запишите исходные пути. Откройте редактор drop-in; при замене ExecStart важно учитывать семантику сброса: сначала пустое ExecStart=, затем новая строка. Не вставляйте пример, пока не известны фактические аргументы запуска.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
    sudo systemctl edit имя.service

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. Шаг 7. Перечитайте unit и проверьте реальную функциональностьВ согласованное окно выполните daemon-reload, затем перезапустите только нужный сервис и убедитесь, что он открывает файлы из нового каталога. Если сервис критичен, оставьте возможность вернуть прежнюю конфигурацию.
  2. Терминал Rocky Linux; нужны административные права
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Терминал Rocky Linux; нужны административные права. Меняет настройки/состояние службы: сначала копия и возможность отката.
    sudo systemctl daemon-reload
    sudo systemctl restart имя.service
    systemctl status имя.service --no-pager

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

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

После перезагрузки нужный сервис автоматически запускается из нового каталога и выполняет свою основную функцию без ошибок 203/EXEC, 200/CHDIR или SELinux.

#Если предложенный способ не сработал

Верните drop-in из резервной копии и предыдущий путь при неуспехе, не изменяйте владельца всего /srv и не выключайте SELinux. Проверьте также отдельные сетевые и дисковые зависимости.

Так эту ошибку тоже называют

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

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