为 systemd 单元设置 PATH

Agr*_*ag9 19 centos path systemd

如何在 CentOS 7 中为非登录 shell 设置 PATH?

具体来说,我有一个 systemd 单元,它需要/usr/local/texlive/2016/bin/x86_64-linux.

我试图将它设置为/etc/environmentwithPATH=/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}"但仅适用于登录外壳。

我查看了所有用户的设置路径(登录和非登录外壳),但上面已经尝试了解决方案。

我查看了如何在 debian 上为所有用户的非登录 shell 和登录 shell 添加系统 $PATH 的路径,但没有公认的解决方案,我不确定是否要修改,/etc/login.defs因为它可能会在更新中更改。

meu*_*euh 21

最简单的答案是在 systemd 单元文件中将 设置PATHExecStart命令的一部分。例如,如果您目前有

ExecStart=/bin/mycmd arg1 arg2
Run Code Online (Sandbox Code Playgroud)

然后将其更改为

ExecStart=/bin/bash -c 'PATH=/new/path:$PATH exec /bin/mycmd arg1 arg2'
Run Code Online (Sandbox Code Playgroud)

的扩展$PATH将由 bash 完成,而不是 systemd。诸如 using 之类的替代方法Environment=PATH=/new/path:$PATH将不起作用,因为 systemd 不会扩展$PATH.