Alpine Linux редактирует PATH перед запуском службы OpenRC
У меня OpenRC запускает службу, которая вызывает java jar, но используемый ею PATH либо отличается от глобального PATH, либо служба запускается до того, как PATH можно будет редактировать.
Я попытался добавить Java в PATH в
- сценарий \etc.profile.d
- \etc\профиль
- \etc\bash\bashrc
Но регистрация PATH в службе всегда показывает, что он используется по умолчанию:
PATH=/bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
Зависимость() в файле .service:
depend() {
after sshd
after docker
}
1 ответ
Все три файла конфигурации, которые вы упомянули, предназначены для интерактивных оболочек — они загружаются, когда пользователь входит в систему на терминале. Но службы почти по определению запускаются полностью вне среды «входа пользователя» и никогда не обращают внимания на такую конфигурацию оболочки.
Не существует такого понятия, как «глобальный PATH», как и любая другая переменная среды, она на самом деле зависит от процесса — любые изменения влияют только на это конкретное поддерево процесса. Например, если вы установите PATH в одном окне оболочки, изменение будет видно только программам, запущенным из этого конкретного окна, — даже другим вашим программам. Таким образом, поскольку файл /etc/profile читается только оболочками интерактивного входа, он будет влиять только на интерактивный вход в систему; изменения не распространяются «вверх».
(Другими словами, на самом деле не имеет значения, запускается ли ваш сервис «после sshd» или «после входа пользователя» — временная шкала изначально не является линейной, это дерево, в котором служба уже отличается от ваших входов в систему sshd .)
Насколько мне удалось выяснить, в OpenRC вы можете установить переменные среды, специфичные для службы, отредактировав/etc/conf.d/<service>
, который представляет собой сценарий оболочки, использующий тот же синтаксис, что и /etc/profile (т. е. вам нужно использовать тот жеexport VAR=value
синтаксис).