web-dev-qa-db-ja.com

systemdユニットのPATHを設定する

CentOS 7で非ログインシェルのPATHを設定するにはどうすればよいですか?

具体的には、/usr/local/texlive/2016/bin/x86_64-linuxにバイナリが必要なsystemdユニットがあります。

/etc/environmentPATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATHを使用して設定しようとしましたが、PATHは/usr/local/texlive/2016/bin/x86_64-linux:$PATH:/usr/local/sbin:/usr/sbinでした。

/etc/profile.d/texlive.shexport PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"で作成しましたが、これはログインシェルでのみ機能しました。

私は Set Path for all Users(Login and Non-login Shells) を見ましたが、解決策はすでに上で試されました。

私は すべてのユーザーの非ログインシェルとdebianのログインシェルのシステム$ PATHにパスを追加する方法 を確認しましたが、承認された解決策がなく、変更するかどうか確信がありません/etc/login.defsアップデートで変更される可能性があるため。

12
Agrajag9

最も簡単な答えは、systemd UnitファイルのPATHコマンドの一部としてExecStartを設定することです。たとえば、現在

ExecStart=/bin/mycmd arg1 arg2

次にそれを

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

$PATHの拡張は、systemdではなくbashによって行われます。 systemdがEnvironment=PATH=/new/path:$PATHを展開しないため、$PATHを使用するなどの代替手段は機能しません。

16
meuh