设置系统单元的路径


13

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

具体来说,我有一个systemd单元,需要中的二进制文件/usr/local/texlive/2016/bin/x86_64-linux

我尝试将其设置为/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}"但仅适用于登录Shell。

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

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

Answers:


17

最简单的答案是在systemd Unit文件中将命令PATHas 设置为ExecStart命令的一部分。例如,如果您当前有

ExecStart=/bin/mycmd arg1 arg2

然后将其更改为

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

的扩展$PATH将由bash而不是systemd完成。如using之类的替代方法Environment=PATH=/new/path:$PATH将无法在systemd下使用,也不会扩展$PATH


如果我以这种方式包装命令并使用profile.d文件(我也希望为登录shell添加路径),是否仍需要在ExecStart中设置路径?还是从profile.d中读取?
Agrajag9

我认为您仍然需要在ExecStart中设置PATH。如果bash是登录shell,它可能只会从profile.d中读取。您可以尝试--login在之前添加-c以强制执行此操作,而不是设置PATH,但是您将使bash运行很多安装程序,这些安装程序在裸机系统环境中可能无法正常运行,并在日志日志中给您带来错误。
meuh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.