Долго я оттягивал этот момент, но видимо пришло время написать свой первый systemd unit
Есть старый бинарник, который исторически запускался чуть ли не вручную под выделенным пользователем, в профайле у которого прописаны условные BASE_DIR и LD_LIBRARY_PATH
Хотелось бы иметь для все преимущества systemd, типа автозапуска, унифицированного способа стартом/пуском, рестартом итд
То есть, если его запустить от произвольного пользователя без учёта переменных окружения, то получим нечто вроде:
/path/to/app: error while loading shared libraries: libname.so: cannot open shared object file: No such file or directory
Если запустить напрямую в виде
LD_LIBRARY_PATH=/path/to/lib BASE_DIR=/path/to/basedir /path/to/app start
то нормально запускается
В итоге я написал нечто вроде этого:
[Unit]
Description=Old app
[Service]
User=appuser
Environment="LD_LIBRARY_PATH=/path/to/lib"
Environment="BASE_DIR=/path/to/basedir"
ExecStart="/path/to/app start"
ExecStop="/path/to/app stop"
[Install]
WantedBy=multi-user.target
Но при systemctl start myapp получаю в ответ code=exited, status=203/EXEC
Пока предполагаю, что не подхватываются переменные окружения.
Как исправить?