我正在让 OpenRC 启动一个调用 java jar 的服务,但是它使用的 PATH 似乎与全局 PATH 不同,或者在 PATH 可以编辑之前就运行了该服务。
我尝试将 java 添加到 PATH 中
- \etc.profile.d 脚本
- \etc\配置文件
- \etc\bash\bashrc
但是在服务中记录 PATH 似乎总是显示它是默认值:
PATH=/bin:/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
.service文件中的depend():
depend() {
after sshd
after docker
}
答案1
您提到的所有三个配置文件都是用于交互式 shell 的——当用户登录终端时,它们会被加载。但服务几乎按照定义启动完全在外面“用户登录”环境,并且永远不会关注那种shell配置。
不存在“全局 PATH”之类的东西,它与任何其他环境变量一样,实际上是特定于进程的 - 任何更改都只会影响该特定进程子树。例如,如果您在一个 shell 窗口中设置 PATH,则更改将仅有的对从该特定窗口启动的程序可见 – 甚至对您自己的其他程序也不可见。因此,由于 /etc/profile 仅由交互式登录 shell 读取,因此它仅对交互式登录有效;更改不会“向上”传播。
(换句话说,你的服务是在“sshd 之后”还是“用户登录之后”运行并不重要——时间线本来就不是线性的,它是一个树其中服务已经与您的 sshd 登录信息不同。)
据我所知,在 OpenRC 中,您可以通过编辑来设置特定于服务的环境变量/etc/conf.d/<service>
,这是一个使用与 /etc/profile 相同语法的 shell 脚本(即您需要使用相同的export VAR=value
语法)。