Supervisor - 无法以 root 或用户身份启动 supervisorctl(用户在配置中设置)
Supervisor - Can't start supervisorctl as root or user (User is set in config)
我以 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
我将我的用户名添加到 [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)
这似乎可以工作 - 在我设法解决主管的其余问题后,时间会告诉它是否继续工作。
为 Adam 的解决方案添加更多内容。
您还需要将 read/write 的组权限授予套接字。
[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)
我尝试了提供的答案,但问题没有解决。
最后用;
注释下面一行,问题解决
; logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
我以 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
我将我的用户名添加到 [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)
这似乎可以工作 - 在我设法解决主管的其余问题后,时间会告诉它是否继续工作。
为 Adam 的解决方案添加更多内容。
您还需要将 read/write 的组权限授予套接字。
[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)
我尝试了提供的答案,但问题没有解决。
最后用;
注释下面一行,问题解决
; logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log