【发布时间】:2019-04-10 12:59:21
【问题描述】:
我正在 Linux debian 平台上使用 supervisord 启动一个 python 脚本。选择执行脚本的用户应取决于环境变量的值。如何使 supervisord 配置文件中的字段“user=”有条件?
首先,我在 supervisor.service 中添加了一个环境变量 SPECIALUSER=myuser(文件 /lib/systemd/system/supervisor.service)
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
KillMode=process
Restart=on-failure
Environment=SPECIALUSER=myuser
然后我尝试使用我的 supervisord.conf 文件中的变量:
[program:myprogram]
command=python myscript.py
user="if [ %(ENV_SPECIALUSER)s = myuser]; then root; else standarduser; fi"
但是当我尝试重新读取 supervisord.conf 时出现以下错误
ERROR: CANT_REREAD: Invalid user name "if [ myuser = myuser ]; then root; else standarduser; fi" in section 'program:myprogram' (file: '/etc/supervisor/conf.d/supervisord.conf')
环境变量被正确解释,但 bash 脚本没有。
我想过直接在变量Environment=SPECIALUSER=root中输入用户名,但是环境变量并不总是可用的。
如果环境变量设置为SPECIALUSER=myuser,我希望 supervisor.d 将我的程序解释为
[program:myprogram]
command=python myscript.py
user=root
在所有其他情况下
[program:myprogram]
command=python myscript.py
user=standarduser
【问题讨论】:
标签: environment-variables conditional supervisord