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