好的,我在我的服务器上设置了 Django、nginx 和 uWSGI……问题是我通过以下命令手动启动了 uWSGI:
uwsgi -s /home/user/sites/sock/uwsgi.sock -t 10 -M -p 1 -C --pythonpath /home/user/sites/ -w mysite.django_wsgi
而且效果很好。我想做的是使用 supervisord 来控制 uWSGI 进程(启动、停止等)。我将如何做到这一点,supervisord 配置会是什么样子?
我只是根据最近的安全公告对我们运行 Zope 的方式进行了一些更改。在咨询中它说:
“确保 Zope/Plone 服务以最低权限运行。理想情况下,Zope 和 ZEO 服务应该只能写入日志和数据目录。”
目前我们有一个专门的 linux 用户运行 buildout,启动和停止服务器并运行 Zope 服务。我们使用supervisord来管理我们并行运行的两个 Zope 实例(relstorage 后端)。
我们当前的 zope 用户需要的不仅仅是日志和数据目录的写权限,以便它可以运行 buildout,所以我选择创建一个额外的 linux 用户 zoperun 来实际运行 zope 服务。zoperun 与 zope 在同一个组中,并且只有对 var 目录的写权限。除了一件事之外,这一切都很好:我希望原始 zope 用户能够使用 supervisorctl 启动和停止 zope 实例。
我不能让这个工作。例如,当我尝试运行时,bin/supervisorctl status我得到
错误:,[Errno 13] 权限被拒绝:文件:行:1
我认为这是因为主管套接字没有组读写权限
srw------- 1 zoperun zopeour 0 Sep 30 09:00 supervisor.sock
我已经umask = 002在 supervisord 配置中进行了设置,但这对这个 superctl 套接字没有影响。
有什么办法可以实现我想要的吗?
我有一个相当基本的主管配置:
[program:drape]
process_name=%(program_name)s_%(process_num)02d
command=python /home/ubuntu/drape/workers/drape.py
numprocs=1
autostart=true
autorestart=true
nocleanup=true
stdout_logfile=/home/ubuntu/supervisord.out.log
stdout_logfile_maxbytes=32MB
stderr_logfile=/home/ubuntu/supervisord.err.log
stderr_logfile_maxbytes=32MB
startsecs=180
Run Code Online (Sandbox Code Playgroud)
我认为这个配置实际上并不重要,但无论如何都要发布。我正在使用股票主管全局配置。我通过标准安装了主管sudo apt-get -y install supervisor......只是为了确定:
$ sudo apt-get -y install supervisor
Reading package lists... Done
Building dependency tree
Reading state information... Done
supervisor is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 69 not upgraded.
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试启动主管时,我得到了完全无声的失败:
ubuntu@...:~$ sudo service supervisor start
ubuntu@...:~$
Run Code Online (Sandbox Code Playgroud)
日志中没有任何内容(我的全局配置有logfile=/var/log/supervisor/supervisord.log),“程序日志”中也没有任何内容(logfile=/var/log/supervisor/supervisord.log.<stream>.log)。
我对运行 ruby 守护进程的其他服务器有类似的配置过程,因此为了进一步深入,我什至创建了一个非常简单的 ruby 脚本并制作了chmod 777这个东西,这样就不存在权限问题:
$ cat test.rb
while …Run Code Online (Sandbox Code Playgroud) 我已经使用主管一年多了。它是从 Debian 软件包安装的。前几天当我升级包时,有些东西坏了,我似乎无法弄清楚是什么。
~> sudo supervisorctl status
http://localhost:9001 refused connection
~> cd /etc/supervisor
~> sudo supervisorctl status
# Works
Run Code Online (Sandbox Code Playgroud)
在我的/etc/supervisor/supervisord.conf.
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
Run Code Online (Sandbox Code Playgroud)
看起来当我不在/etc/supervisor文件夹内时,配置没有加载并且主管使用默认值(http://localhost:9001是默认值serverurl)
我检查了 Debian 包启动 supervisor 的方式,似乎配置文件的路径是绝对的,所以我不明白为什么它不起作用。
/usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
Run Code Online (Sandbox Code Playgroud)
任何人有同样的问题或解决方案?这很烦人,因为它打破了我的可靠食谱。谢谢
编辑:
这是 /etc/supervisor/supervisord.conf 的完整内容:
[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
Run Code Online (Sandbox Code Playgroud)
这是请求的变量:
~> which supervisorctl
/usr/bin/supervisorctl
~> which supervisord
/usr/bin/supervisord
~> supervisord --version
3.1.3
Run Code Online (Sandbox Code Playgroud) 我有一个使用 Nginx 和 Gunicorn 的 Django 应用程序“djngxgun”。我刚刚安装了 Supervisor,以便我可以使用它来管理我的 Gunicorn 进程。问题是在我重新启动服务器后,Supervisor 没有启动 Gunicorn。当我通过主管启动 Gunicorn 时(“sudo supervisorctl start djngxgun”),我看到在我的 Gunicorn error.log 文件中重复出现以下错误:
2014-02-28 15:36:47 [4753] [INFO] Starting gunicorn 18.0
Traceback (most recent call last):
File "/home/djngxgun/venv/djngxgun/bin/gunicorn", line 9, in <module>
load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')()
File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 71, in run
WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 143, in run
Arbiter(self).run()
File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 172, in run
self.start()
File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 124, in start
self.pidfile.create(self.pid)
File "/home/djngxgun/venv/djngxgun/local/lib/python2.7/site-packages/gunicorn/pidfile.py", line 38, in create
fd, fname = …Run Code Online (Sandbox Code Playgroud) 当我尝试从 Supervisor 下运行 Node.js 应用程序时,出现以下错误:
/usr/bin/env node: No such file of directory
Run Code Online (Sandbox Code Playgroud)
它是一台运行 Ubuntu 16.04 的机器,实际上安装了 /usr/bin/node 并且它符号链接到 /usr/bin/nodejs。我从Node.js 存储库安装了它。所以当我跑步时
node -v
/usr/bin/env node -v
Run Code Online (Sandbox Code Playgroud)
我得到:
v9.7.1
Run Code Online (Sandbox Code Playgroud)
我的应用程序的 Supervisor (v 3.2.0) 配置是:
[program:verdaccio]
command=/usr/bin/verdaccio
autostart=true
autorestart=true
user=ubu
environment=HOME="/home/ubu",USER="ubu",PATH="$PATH:/home/ubu/.local/bin"
Run Code Online (Sandbox Code Playgroud)
怎么了?