linux服务器无法获取自定义环境变量的问题及解决方案

问题描述:
在/etc/profile中添加了自定义的环境变量,并source了,在console中可以正常输出,python中也可以通过os.genenv方法正常获取到:

1
export ODOO_ENV=test

1
2
echo $ODOO_ENV
test
1
2
3
import os
print os.getenv('ODOO_ENV',None)
test

但是,启动服务service后,却获取不到ODOO_ENV这个变量:

原因:
在linux中service脚本只加载TERM、PATH和LANG三个环境变量,其他均被忽略了。

解决方案:

  1. 针对传统init服务,需要在服务启动脚本中添加export加入自定义环境变量。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
    DAEMON=/usr/bin/odoo
    NAME=odoo
    DESC=odoo
    CONFIG=/etc/odoo/odoo.conf
    LOGFILE=/var/log/odoo/odoo-server.log
    PIDFILE=/var/run/${NAME}.pid
    USER=odoo
    export LOGNAME=$USER
    export ODOO_ENV=test
  2. 针对systemd的服务,只需要在配置文件中添加Environment变量即可。

    1
    2
    3
    4
    5
    6
    [Service]
    Type=simple
    User=odoo
    Group=odoo
    ExecStart=/usr/bin/odoo --config /etc/odoo/odoo.conf --logfile /var/log/odoo/odoo-server.log
    Environment=ODOO_ENV=test

centos 7.2 service 脚本目录:/usr/lib/systemd/system/

你的支持我的动力