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 脚本时为我解决了这个问题。
出于某种原因,主管拒绝以 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 脚本时为我解决了这个问题。