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

时间:2014-12-04 10:19:03

标签: tornado supervisord supervisor

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

pip install --user xxx

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

[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

但它失败了,处于supervisorctl状态:

testpro            FATAL     Exited too quickly (process log may have details)

我看到日志并发现它无法导入相对的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

它运行正常

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

3 个答案:

答案 0 :(得分:19)

我已经解决了这个问题:

在程序部分添加environment选项:

environment=HOME="/home/bob",USER="bob"

请参阅Supervisor doc - Subprocess Environment

  

运行子进程时,supervisord没有执行shell,所以   环境变量,如USER,PATH,HOME,SHELL,LOGNAME等。   不会更改其默认值或以其他方式重新分配。这是   当你从一个程序运行程序时,特别重要的是要注意   supervisord以root身份运行,配置中包含user =节。   与cron不同,supervisord不会尝试神圣和覆盖   “基本”环境变量,如USER,PATH,HOME和LOGNAME   当它对user = program中定义的用户执行setuid时   配置选项。如果需要为a设置环境变量   特殊程序,否则可能由shell调用设置   对于特定用户,您必须在其中明确地执行此操作   environment =程序配置选项。设置这些的一个例子   环境变量如下。

[program:apache2]
command=/home/chrism/bin/httpd -c "ErrorLog
/dev/stdout" -DFOREGROUND user=chrism
environment=HOME="/home/chrism",USER="chrism"

答案 1 :(得分:0)

您可以使用目录选项。

“当supervisord守护进程时,切换到此目录。此选项可以包含值”

[program:testpro]
command=python /path/to/myfile.py
directory=/path/to/
user=bob    ; set the user to bob
redirect_stderr=true
stdout_logfile=/path/to/log
numproces=1
autostart=true

答案 2 :(得分:0)

不要忘记重新启动supervisord本身,例如/etc/init.d/supervisord restart,因为否则您的配置更改将被取消,并且它将继续以root身份运行您的服务。