В терминале работает. Через systemd — падает.
Почему?
Потому что сервис может запускаться в другом окружении.
Сценарий:
запускаем скрипт вручную → работает
создаём systemd unit → ошибка:
— команда не найдена; — файл не найден; — конфигурация отсутствует.
Частая ошибка диагностики:
сразу искать проблему в приложении.
Но сначала нужно проверить контекст запуска.
Что отличается:
— пользователь; — PATH; — рабочий каталог; — переменные окружения; — права доступа.
Проверяем unit:
User=
Кто запускает сервис?
WorkingDirectory=
Откуда выполняется команда?
Environment= EnvironmentFile=
Какие переменные передаются?
ExecStart=
Что именно запускается?
Важно:
ulimit, PATH и переменные вашей shell не являются доказательством того, что их получил systemd-сервис.
Главный источник информации:
journalctl -u имя-сервиса
Смотрите:
— ошибку; — пользователя; — момент запуска; — код завершения.
Типичная ошибка:
запустить сервис от root, чтобы «проверить, работает ли».
Так можно скрыть проблему с правами или окружением.
Правильный порядок:
unit-файл → пользователь → рабочий каталог → переменные → права → журнал.
Вывод:
Работа команды в терминале не гарантирует её работу через systemd.
Проверяйте не только приложение, а среду, в которой оно запускается.
Сохраните этот чек-лист диагностики systemd-сервисов.