“sudo service uwsgi restart”返回 [fail] 但是 uwsgi 日志显示进程已经创建并且 python 应用程序正在运行

7 linux ubuntu

我正在运行本地 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 可以愉快地写入它。

如果其他人可以阐明情况是否如此,那就太好了。