【问题标题】:Supervisor - Can't start supervisorctl as root or user (User is set in config)主管 - 无法以 root 或用户身份启动 supervisorctl(用户在配置中设置)
【发布时间】:2016-02-20 21:03:10
【问题描述】:

我以 root 身份启动主管:

sudo supervisord -c /etc/supervisor/supervisord.conf

然后我尝试启动supervisorctl:

(myapp)appuser@ip-172-31-21-65:~/appuser$ supervisorctl -c /etc/supervisor/supervisord.conf

主管以以下消息开头:

error: <class 'socket.error'>, [Errno 13] Permission denied: file: /usr/lib/python2.7/socket.py line: 224

尝试以 root 身份运行第二个命令也不成功。我的理解是这是设计使然。

我发现的所有建议都表明我应该将我的用户设置为执行命令的用户,但这已经是我全部配置的方式:

这是我正在使用的脚本文件:

NAME="myapp"                              
DJANGODIR=/home/appuser/myapp             
SOCKFILE=/home/appuser/myapp/gunicorn.sock        
USER=appuser                                        
GROUP=webdata                                     
NUM_WORKERS=1                                     
DJANGO_SETTINGS_MODULE=myapp.settings             
DJANGO_WSGI_MODULE=myapp.wsgi  

我不确定是什么搞砸了?我认为这可能是GROUP 设置,因为我不认识这个值。但是,如果我将其注释掉,似乎并没有什么不同。我应该如何解决这个问题?

编辑:我创建了一个名为 supervisor 的组,向其中添加了 appuser 并更改了 GROUP 设置以匹配,但仍然没有乐趣。

这是我的 supervisord.conf:

; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/super$
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TE$

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

[include]
files = /etc/supervisor/conf.d/*.conf

还有我的应用配置文件:

[program:myapp]
command = /home/appuser/myapp/gunicorn_start.sh ; Command to start app
user = appuser ; User to run as
stdout_logfile = /home/appuser/myapp/logs/supervisor.log ; Where to write$
redirect_stderr = true ; Save stderr in the same log
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8 ; Set UTF-8 as default encoding

我的主管版本是:

>supervisord --version
3.0b2

【问题讨论】:

  • 您使用的是哪个版本的 supervisord?请提供主管配置而不是独角兽配置。
  • 我已经用请求的信息更新了问题。将用户设置为 www-data 没有帮助。
  • 在应用程序的配置文件中尝试 chmod-socket = 664。
  • 我将chmod-socket = 664 粘贴到应用程序的配置文件中,但仍然出现相同的权限错误。
  • 据我了解,主管无法访问特定的 Python 文件。我注意到有人投票结束了这个问题。如果这不是 Python 问题,而是服务器问题或 Linux 问题,请指导我正确的方向,我将继续前进。

标签: python django gunicorn supervisord


【解决方案1】:

我将我的用户名添加到 [unix_http_server] 部分下的 superisord.conf 文件中,如下所示:

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)
chown=appuser:supervisor        ;(username:group)

这似乎可以工作 - 在我设法解决其余主管问题后,时间会证明它是否继续工作。

【讨论】:

  • 我知道这是一个老问题,但对于遇到这个问题的任何人:您也需要授予组权限以读取/写入套接字。所以把 chmod=0700 改成 chmod=0770
【解决方案2】:

为亚当的解决方案添加更多内容。

您还需要授予组读取/写入套接字的权限。

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0770                       ; sockef file mode (default 0700)
chown=appuser:supervisor        ;(username:group)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多