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


13

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

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

私はそれを設定しようとし/etc/environmentましたPATH=/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.shしましたexport PATH="/usr/local/texlive/2016/bin/x86_64-linux:${PATH}"が、ログインシェルでのみ機能しました。

すべてのユーザー(ログインシェルと非ログインシェル)のパスの設定を確認しましたが、上記の解決策はすでに試されています。

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

回答:


17

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

ExecStart=/bin/mycmd arg1 arg2

次にそれを

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

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


この方法でコマンドをラップし、profile.dファイルを使用する場合(ログインシェルのパスも追加する必要があります)、ExecStartでパスを設定する必要がありますか?それともprofile.dから読み取りますか?
Agrajag9

それでも、ExecStartでPATHを設定する必要があると思います。ログインシェルの場合、bashはおそらくprofile.dからのみ読み取るでしょう。PATHを設定する代わりに、これを強制的に追加する--login前に追加することもでき-cますが、bashを実行すると、ベアsystemd環境ではうまく機能しない可能性のある多くのセットアップが実行され、ジャーナルログにエラーが表示されます。
meuh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.