程序部分中的Supervisor配置用户选项

Tan*_*Woo 10 tornado supervisord

我有一个Tornado程序,所有相对的python lib安装在一个名为bob的非root用户中:

pip install --user xxx
Run Code Online (Sandbox Code Playgroud)

现在我想在主管中运行它:

[program:testpro]
command=python /path/to/myfile.py
user=bob    ; set the user to bob
redirect_stderr=true
stdout_logfile=/path/to/log
numproces=1
autostart=true
Run Code Online (Sandbox Code Playgroud)

但它在supervisorctl状态下失败了:

testpro            FATAL     Exited too quickly (process log may have details)
Run Code Online (Sandbox Code Playgroud)

我看到日志并发现它无法导入相对的python库,所以它不能像bob一样运行.

然后我改为:

[program:testpro]
command=sudo -u bob -i python /path/to/myfile.py
;user=bob ;comment this
redirect_stderr=true
stdout_logfile=/path/to/log
numproces=1
autostart=true
Run Code Online (Sandbox Code Playgroud)

它运行正常

那么,该选项有user什么作用?以及如何在选项中配置run-as用户?

Tan*_*Woo 19

我已经解决了这个问题:

environment在程序部分添加选项:

environment=HOME="/home/bob",USER="bob"
Run Code Online (Sandbox Code Playgroud)

请参阅Supervisor doc - 子流程环境:

当运行子进程时,supervisord不会执行shell,因此诸如USER,PATH,HOME,SHELL,LOGNAME等环境变量不会更改其默认值或以其他方式重新分配.当您从作为root运行的supervisord运行程序并在配置中使用user =节时,这一点尤为重要.与cron不同,supervisord在对user = program config选项中定义的用户执行setuid时,不会尝试对"基本"环境变量(如USER,PATH,HOME和LOGNAME)进行更新和覆盖.如果需要为特定程序设置可能由特定用户的shell调用设置的特定程序的环境变量,则必须在environment = program config选项中显式执行.设置这些环境变量的示例如下.

[program:apache2]
command=/home/chrism/bin/httpd -c "ErrorLog
/dev/stdout" -DFOREGROUND user=chrism
environment=HOME="/home/chrism",USER="chrism"
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您正在运行一个 `[fcgi-program:foo]`,您可能需要将套接字的用户设置为 _www-data_。以下作品: `[fcgi-program:foo]` `user=www-data` `environment=USER="www-data"` `# 其余选项` (2认同)