Linux 注册的系统服务(service), 调用环境变量的问题

29 篇文章 0 订阅

场景

在系统服务中注册服务,通过系统服务启动的应用,不能获取已经全局设置的环境变量。
已经尝试在以下位置设置了环境变量, HOME_PATH=’/home/path’:

/etc/profile
~/.bash_profile
~/.bashrc

但是,注册的系统服务(service)中的以下命令:

# Start main service
ExecStart=HOME_PATH/manage.py runs start

对应的service service_name start 启动的应用中却获取不了该环境变量(os.getenv(‘HOME_PATH’)返回为None)。
但是在bash中直接运行HOME_PATH/manage.py runs start却可以正常获取到环境变量(os.getenv(‘HOME_PATH’)返回正确)。

解决办法

[Service]
User=root
Group=root
Environment="HOME_PATH=/home/path"

在此系统服务的配置中增加需要的环境变量Environment="HOME_PATH=/home/path"

未清楚的问题


2020年4月21日,
找到原因,来自于:https://blog.csdn.net/mmoooodd/article/details/17263923

为什么注册的系统服务不能获取到全局的环境变量?

普通Shell脚本在终端下运行时,环境变量来自于init/profile/.bash_profile等,就是在当前终端下可以得到的环境,比如PATH。
在service模式下,脚本运行在受限的环境中: 比如
service tomcat restart等同于
env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "/etc/init.d/tomcat" restart

其中: env -i表示清空当前环境变量,然后带入后面的LANG,PATH,TERM
而PATH变量来自于/etc/init.d/functions
PATH="/sbin:/usr/sbin:/bin:/usr/bin"

所以,当把一个shell脚本放入到service中时,需要设定好PATH等环境。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值