我正在运行本地 vagrant VM,Ubuntu 13.10,使用 nginx 反向代理到 uwsgi。
跑步
sudo /etc/init.d/nginx status
Run Code Online (Sandbox Code Playgroud)
返回
* nginx is running
Run Code Online (Sandbox Code Playgroud)
然而运行
sudo /etc/init.d/uwsgi status
Run Code Online (Sandbox Code Playgroud)
返回
* which one?
Run Code Online (Sandbox Code Playgroud)
如果我查看 wsgi 应用程序的日志文件,我可以看到 uwsgi 正在运行,已经创建了工作进程等等......那么是否有一个隐藏的 uwsgi 实例在某处运行,从而混淆了服务重启命令?
我使用以下方法安装了 uwsgi:
apt-get install uwsgi
Run Code Online (Sandbox Code Playgroud)
这是 app.ini 文件:
[uwsgi]
plugin = python
socket = /run/uwsgi/app/myapp/socket
chdir = /var/www/myapp
module = project.wsgi:application
pidfile = /tmp/myapp-master.pid
master = True
daemonize = /var/log/uwsgi/myapp.log
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
小智 7
将 pidfile 选项更改为 pidfile2 似乎可以解决此问题。
pidfile2 = /tmp/myapp-master.pid
Run Code Online (Sandbox Code Playgroud)
有趣的是service uwsgi stop
回报,[OK]
但service uwsgi start
回报[fail]
所以我假设当非特权用户(即 www-data)试图写入由特权用户(例如 root)创建的 pidfile 时会发生错误。
pidfile2 将在权限下降后创建 pidfile - 所以 www-data 可以愉快地写入它。
如果其他人可以阐明情况是否如此,那就太好了。