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

浙公网安备 33010602011771号