Как добавить условные операторы в конфигурационный файл супервизора - PullRequest
0 голосов
/ 10 апреля 2019

Я запускаю скрипт на python с supervisord на Linux-платформе Debian. Пользователь, выбранный для выполнения сценария, должен зависеть от значения переменной среды. Как сделать поле «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
...