由于某些原因,supervisor拒绝以user
身份启动command
,它总是以root用户身份运行,这对我是一个问题,因为我正在激活一个virtualenv
并运行特定于该虚拟环境的命令。
所以,我的配置如下:
[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身份启动了supervisor。更奇怪的是,上面的代码在我的本地机器上完全正常,但在服务器上显示了上面的日志。
我已经没有任何想法... :((
编辑:
在.sh脚本中添加了echo
,user.txt输出:
root
完全困惑!
nltk_data
)...我不明白为什么supervisor不会以用户身份运行?!?!-为什么它仍然以root身份运行? - JohnJecho $USER >> /home/some/user.txt
,猜猜我得到了什么?root
!! - JohnJid
命令的输出更可信。但是是的,看起来用户切换功能确实无法正常工作。服务器上有任何 SELinux 限制吗? - dhke