【问题标题】:How to add conditional statements in supervisord configuration file如何在 supervisord 配置文件中添加条件语句
【发布时间】: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


    【解决方案1】:

    根据文档,用户参数值永远不会“解释”或发送到外壳。这意味着它会尝试使用整个值作为用户名。

    http://supervisord.org/configuration.html#program-x-section-settings

    所有参数都不会被解释或发送到 shell。这意味着您通常不能在 supervisord.conf 的参数中插入条件。

    如果您的目标只是在不同的平台上使用不同的用户,或者一个用于开发,另一个用于部署服务器,我建议为该服务创建一个专用用户。

    如果您的目标只是有时以超级用户身份运行,我建议始终在您的 supervisord.conf 中使用 user=root 并将您的程序包装在一个解释此环境变量并相应地删除权限的小型 shell 脚本中。

    这个其他 SO 问题可能会对您有所帮助: https://unix.stackexchange.com/questions/132663/how-do-i-drop-root-privileges-in-shell-scripts

    【讨论】:

    • 嗨@asheidan,谢谢你的回答。我只想在某些配置中以 root 身份运行该程序。因为我没有找到解决方案,所以我设法以普通用户身份运行程序,而不是以 root 用户身份运行。
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 2019-12-28
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多