Назад | Перейти на главную страницу

Как использовать переменную окружения `$ HOME` в служебных файлах systemd

Я пытаюсь использовать $HOME переменная среды в ExecStart. Я пробовал много разных вещей, например $HOME и ${HOME} но вроде ничего не работает

ExecStart=${HOME}/bin/some-binary

Кто-нибудь знает правильный формат для этого?

Я думаю, это то, что вы ищете: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers.

В частности, %h должен расшириться до домашнего каталога текущего пользователя.

Вы должны определить пользователя это User=foo в служебном файле иметь ${HOME} работать так, как вы ожидаете.

Если вы не установите пользователя, $HOME будет расширен до домашнего каталога пользователя по умолчанию, используемого для запуска команды, поэтому он не будет соответствовать вашему $HOME, следовательно, двоичный.

Другое решение - использовать для двоичного файла абсолютный путь.

Полный список поддерживаемых переменных (называемых «Спецификаторами») находится здесь: https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers.

Нет спецификатора для домашнего каталога пользователя, от имени которого запускается служба (тот, который указан User=). Есть только один для пользователя, запустившего диспетчер служб.

По ссылке:

%h домашний каталог пользователь, запускающий диспетчер служб пример. В случае с системным менеджером это разрешает "/root". Обратите внимание, что этот параметр не под влиянием User= настройка настраивается в разделе [Сервис] сервисного блока.