2014-12-04 32 views
4

我有一個龍捲風程序,全部由安裝在非root用戶名爲鮑勃的相對蟒蛇的lib:監事配置用戶選項

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) 

我看到了日誌,並發現它無法導入relativ e python lib,所以它不能像鮑勃那樣運行。

然後我更改爲:

[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 

,它運行OK

那麼,什麼是期權user嗎?以及如何在選項中配置運行用戶?

回答

12

我已經解決了這個問題:

在程序部分添加environment選項:

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

請參閱Supervisor doc - Subprocess Environment

當supervisord運行子進程時,沒有shell執行,因此 環境變量(如USER,PATH,HOME,SHELL,LOGNAME等)不會從其默認值更改或以其他方式重新分配。當你運行一個 supervisord程序作爲root運行並且在配置中使用user = stanza時,這是 特別重要。 與cron不同的是,supervisord在向用戶=程序 配置選項中定義的用戶執行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" 
+0

請注意,如果您正在運行'[fcgi-program:foo]',則可能需要將套接字用戶設置爲_www-data_。以下作品: '[fcgi-program:foo]' 'user = www-data' 'environment = USER =「www-data」' '#其餘選項' – uKolka 2018-02-07 21:52:39

0

您可以使用目錄選項。

「當supervisord daemonizes,切換到該目錄,此選項可包含的價值。」

[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 
+0

不能使用。我想知道set'user'和'sudo -u bob'之間的區別嗎? – 2014-12-04 14:23:09

+0

嗨,我已經解決了這個問題,你可以看到我的答案。 – 2014-12-05 02:58:04

0

不要忘記重啓supervisord本身,如與/etc/init.d/supervisord restart,否則你的conf更改不會被拾起,它會繼續運行您的服務爲根。