Я запускаю скрипт на 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