#Симптом и границы применимости
После переноса каталога программы или скрипта в Arch Linux перестал работать автоматический запуск через systemd, пользовательский unit или файл .desktop. Важно отличить команду с устаревшим абсолютным путём от отсутствия доступа и от недоступности нового носителя при загрузке.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| ExecStart использует прежний путьПосле переноса запись unit всё ещё ссылается на удалённый файл. | systemctl status сообщает status=203/EXEC или No such file. | Изменить полный путь в своём unit. |
| Изменился WorkingDirectory или файл окруженияПрограмма ожидает относительные файлы в старой директории. | Журнал содержит CHDIR, путь конфигурации или EnvironmentFile отсутствует. | Проверить обе директивы, а не только ExecStart. |
| Каталог на поздно монтируемом разделеРесурс доступен после входа, но ещё отсутствует на этапе запуска. | В журнале ранней загрузки нет нужного тома. | Уточнить зависимости от точного Mount unit. |
#Подробная диагностика и безопасные действия
- 1. Узнайте, какой механизм запуска используетсяОткройте терминал: система может запускать программу как systemd service, user service или desktop autostart. Начните с поиска имени в unit; для пользовательского процесса смотрите systemctl --user, а для графического автозапуска каталог ~/.config/autostart.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl status ИМЯ.service --no-pagersystemctl --user status ИМЯ.service --no-pagerls ~/.config/autostart/
- 2. Посмотрите исходные пути и переопределенияДля systemd важны ExecStart, WorkingDirectory и EnvironmentFile, включая drop-ins.
systemctl catпокажет определения,systemctl show— собранные свойства; отсутствие файлов конфигурации из-за переноса означает точную причину.Linux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.systemctl cat ИМЯ.servicesystemctl show ИМЯ.service -p ExecStart -p WorkingDirectory -p EnvironmentFiles
- 3. Найдите файл в новом расположенииУкажите фактический новый каталог без догадок. Для каталогов с пробелами используйте кавычки в обычной оболочке, а в ExecStart правила экранирования systemd отличаются от Bash.
fileпоможет понять, запускаемый ли это скрипт или двоичный файл. - Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
ls -la /НОВЫЙ/КАТАЛОГfile /НОВЫЙ/КАТАЛОГ/ПРОГРАММАnamei -l /НОВЫЙ/КАТАЛОГ/ПРОГРАММА
- 4. Проверьте монтирование нового носителяЕсли перенос был на отдельный диск, определите точку и проверьте её доступность во время загрузки. На сервере не добавляйте After=network.target вместо зависимости от тома, если сеть к этому не относится.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
findmnt -T /НОВЫЙ/КАТАЛОГlsblk -fjournalctl -b -u ИМЯ.service --no-pager -n 90
- 5. Проверьте права и запуск под штатной учётной записьюПрочитайте User/Group из unit и владельца нового каталога. Если сам файл доступен, но не доступны его родительские каталоги или библиотека, массовая смена владельца не поможет безопасно. Зафиксируйте нужные конкретные права.
- Диагностическая команда в терминале Arch Linux, без изменения настроекLinux · Терминал (Bash)КомандаДиагностическая команда в терминале Arch Linux, без изменения настроек.
systemctl show ИМЯ.service -p User -p Groupstat -c "%U:%G %a %n" /НОВЫЙ/КАТАЛОГ/ПРОГРАММА
- 6. Исправьте только рабочую конфигурациюСохраните исходный unit и используйте
systemctl editдля точечного исправления. В drop-in для ExecStart его обычно сначала сбрасывают пустымExecStart=, затем задают новую строку; редактирование допустимо лишь после изучения реального unit и документации программы.Linux · Терминал (Bash)С осторожностьюНужен sudoМеняет автозапуск выбранной службы; обязательно сохраните исходный unit для возврата.sudo systemctl edit ИМЯ.servicesudo systemctl daemon-reloadsystemctl cat ИМЯ.serviceКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 7. Запустите и подтвердите работоспособностьПосле исправления запустите одну службу в согласованное время и проверьте её фактическое действие. При ошибке 203/EXEC ищите неправильный путь или интерпретатор скрипта; при 200/CHDIR — несуществующий рабочий каталог.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюНужен sudoВыполняйте в терминале Arch Linux; изменяйте только указанную и предварительно проверенную настройку.
sudo systemctl restart ИМЯ.servicesystemctl status ИМЯ.service --no-pagerjournalctl -b -u ИМЯ.service --no-pager -n 50Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как понять, что проблема устранена
Повторите исходное действие, из-за которого возникла неисправность, и сверяйте не только код завершения команды, но и прикладной результат. Сохраните вывод последней диагностической команды и записи журнала до и после исправления. Если ошибка повторяется, верните только изменённую настройку из резервной копии и передайте специалисту точный симптом, имя программы/службы, версию системы и необходимые фрагменты журнала без паролей и закрытых ключей.
#Что делать, если не помогло
Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.