Linux注册的系统服务(Service)环境隔离问题

场景

服务器上配置maven环境,在/etc/profile source文件之后变量echo显示是存在的。

使用java -jar启动项目可以获取到maven环境变量,而通过注册的系统服务(systemctl start xxx.service)启动获取不到。

解决办法

手动修改/usr/lib/systemd/system/xxx.service,在里面增加环境变量

[Service]
Type=forking
Environment=你的环境变量名=变量值

或者创建一个目录/etc/systemd/system/myservice.service.d,在目录内创建一个文件名.conf(通常为override.conf)结尾的文件。如下:然后使用EnvironmentFile加载它们。

[Service]
Environment="SECRET=pGNqduRFkB4K9C2vijOmUDa2kPtUhArN"
Environment="ANOTHER_SECRET=JP8YLOc2bsNlrGuD6LVTq7L36obpjzxd"

修改后

systemctl daemon-reload

再restart服务

总结

Linux自定义的服务无法使用系统环境变量。

在service模式下,脚本运行在受限的环境中。

参考:

https://qastack.cn/server/413397/how-to-set-environment-variable-in-systemd-service

posted @ 2022-08-25 22:28  heshibina  阅读(138)  评论(0)    收藏  举报