TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #893 1.9K
😑 Почему сервис работает вручную, но падает в systemd

Распространенная ситуация: запускаете приложение руками и все работает.


/opt/myapp/start.sh


А через systemd:


systemctl start myapp


сервис падает, не видит файлы, не находит переменные, не может подключиться к сокету или пишет что-то вроде:

No such file or directory
Permission denied
command not found

И тут важно понять главное: запуск руками и запуск через systemd - это не одно и то же окружение. Когда вы запускаете команду из shell, у вас уже есть:

переменные окружения;
текущий каталог;
пользовательская сессия;
PATH;
ssh-agent;
загруженный профиль .bashrc / .profile;
права вашего пользователя.

А systemd запускает сервис гораздо строже.

▪️Самые частые причины:

Нет нужного PATH. В shell команда находится, а в systemd нет.

Плохо:


ExecStart=python app.py


Лучше:


ExecStart=/usr/bin/python3 /opt/myapp/app.py


Другой рабочий каталог. Скрипт ожидает файлы рядом с собой, а systemd запускает его не оттуда.


WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh


Не хватает переменных окружения. Например, DB_HOST, API_TOKEN, JAVA_HOME.


Environment="DB_HOST=127.0.0.1"
EnvironmentFile=/etc/myapp/myapp.env


Не тот пользователь. Вручную запускали от root, а сервис работает от myapp.


User=myapp
Group=myapp


И внезапно выясняется, что нет прав на логи, конфиги или каталоги данных.

Сервис стартует раньше зависимости. Например, приложение поднимается раньше базы, сети или mount point.


After=network-online.target postgresql.service
Wants=network-online.target


Скрипт требует интерактивную оболочку. Если внутри завязка на .bashrc, алиасы, read, sudo с паролем или интерактивные команды - в systemd это почти гарантированно сломается. Что смотреть первым делом:


systemctl status myapp
journalctl -u myapp -xe
systemctl cat myapp


Полезно вывести окружение процесса:


systemctl show myapp -p Environment


И проверить unit на синтаксис:


systemd-analyze verify /etc/systemd/system/myapp.service


#linux #systemd

🧑‍💻 NetworkAdmin
  • 👍 5
  • ❤ 1
More from @networkadminru
  1. Sep 29, 2026🥱 Как быстро разобраться с дисками и маунтами Когда на сервере несколько дисков, LVM, отд…
  2. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  3. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  4. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
  5. Sep 22, 2026🌚 watch: простая динамическая диагностика в терминале Иногда не нужен отдельный мониторин…
  6. Sep 21, 2026👌 Firewall default deny: как внедрять без внезапного отрезания доступа Идея простая: разр…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →