supervisord 拒绝以用户身份执行 运行 命令(总是 运行s 作为 root)

supervisord refuses to run command as user (always runs as root)

出于某种原因,主管拒绝以 user 身份启动 command - 它总是 运行 以 root 身份启动 - 这对我来说是个问题,因为我正在激活一个virtualenv 和 运行 特定于该特定 virtualenv 的命令。

所以,我的 conf 看起来像这样:

[program:site]

command = /home/some/virtual/env/dir/run/start.sh
user = some
stdout_logfile = /home/some/etc/supervisor/logs/logging.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
stopsignal=KILL
killasgroup=true
autostart=true

start.sh 看起来像这样:

#!/bin/bash
echo $USER >> /home/some/user.txt
cd
source /home/foo/some/virtual/env/bin/activate
cd /home/foo/some/virtual/env
SOCKFILE01=/home/some/etc/supervisor/site.sock
exec /home/some/virtual/env/bin/gunicorn -b unix:$SOCKFILE01  site.wsgi:application -w 2 -k gevent --worker-connections=2000 
exit 0

当我检查日志时,我看到:

start.sh: line 2: cd: /root: Permission denied

这意味着这仍然是 运行 root 用户。

我对此完全感到困惑。我以 root 身份启动主管。更奇怪的是,上面的代码在我的本地机器上工作得很好,但在服务器上却显示了上面的日志。

我 运行 没有想法... :((

编辑:

echo 添加到 .sh 脚本并 user.txt 吐出:

root

..百思不得其解!

您需要如下设置环境变量并更新命令:

[program:site]

command=bash -c "/home/some/virtual/env/dir/run/start.sh"
user=some
stdout_logfile=/home/some/etc/supervisor/logs/logging.log
redirect_stderr=true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8,HOME="/home/some",USER="some"
stopsignal=KILL
killasgroup=true
autostart=true

这在 http://supervisord.org/subprocess.html#subprocess-environment 中有描述,并在尝试 运行 npm 脚本时为我解决了这个问题。