Установите PATH для системного блока


13

Как установить PATH для оболочек без регистрации в CentOS 7?

В частности, у меня есть системный модуль, которому нужны двоичные файлы /usr/local/texlive/2016/bin/x86_64-linux.

Я попытался установить это /etc/environmentс, PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHно тогда мой ПУТЬ был /usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbin.

Я создал /etc/profile.d/texlive.shс, export PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"но это работало только для оболочек входа в систему.

Я посмотрел на Set Path для всех пользователей (вход в систему и не вход в систему оболочек), но решение уже было предпринято выше.

Я посмотрел на Как добавить путь к system $ PATH для всех пользователей, не входящих в оболочку и оболочку входа в систему в Debian, но нет принятого решения, и я не уверен, что хочу изменить, /etc/login.defsпотому что это может измениться в обновлении.

Ответы:


17

Самый простой ответ - установить PATHкак часть вашей ExecStartкоманды в файле модуля systemd. Например, если у вас есть

ExecStart=/bin/mycmd arg1 arg2

затем измените его на

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'

Расширение $PATHбудет выполняться bash, а не systemd. Альтернативы, такие как использование Environment=PATH=/new/path:$PATH, не будут работать, так как systemd не расширит $PATH.


Если я оберну команду таким образом И воспользуюсь файлом profile.d (я хочу, чтобы путь добавлялся и для оболочек входа в систему), мне все равно нужно будет указать путь в ExecStart? Или это будет читать из profile.d?
Agrajag9

Я думаю, вам все равно нужно будет установить PATH в ExecStart. Bash, вероятно, будет читать только из profile.d, если это оболочка входа в систему. Вы можете попробовать добавить --loginдо, -cчтобы форсировать это, вместо того, чтобы устанавливать PATH, но вы будете запускать bash много настроек, которые могут плохо работать в чистой среде systemd, и сообщать об ошибках в журнале журнала.
17
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.