KeyError:linux服务执行的Python脚本无法访问环境var

时间:2017-12-01 02:19:04

标签: python linux service raspberry-pi

所以我在Raspberry Pi上有一个简单的服务,它在启动时运行Python脚本。我还通过运行export OPSESPORT=XXXX来设置env变量。这是服务文件:

[Unit]
Description=My desc
After=multi-user.target

[Service]
Type=simple
User=pi
ExecStart=/usr/bin/python /home/pi/path/to/file/somefile.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

在somefile.py中,我有:

import os
PORT = int(os.environ['OPSESPORT'])
#other code

检查服务日志时会出现以下错误:

Traceback (most recent call last):
   File  line 141, in <module>
     main()
   File  line 83, in main
     PORT = int(os.environ['OPSESPORT'])
   File  in __getitem__
    raise KeyError(key)
KeyError: 'OPSESPORT'

这非常奇怪,因为如果我只是运行脚本python somefile.py,那么它工作正常,但是如果我用sudo systemctl start name.service启动服务然后运行脚本,它就无法访问键。作为参考,我在Raspbian GNU / Linux 9上使用Python 2.7.13(拉伸)。

1 个答案:

答案 0 :(得分:2)

当你使用sudo时,它不会使用相同的env变量。你可以在没有超级用户权限的情况下运行systemctl start name.service吗?

编辑:尝试添加
[Service] Enviroment="OPSESPORT=XXX"