为什么 Upstart 没有启动 uWSGI?

为什么 Upstart 没有启动 uWSGI?

我正在尝试在我的 VPS 上设置一个 django 项目。我正在尝试获取一个uWSGI 皇帝运行并生成 vassals。我已经按照包括 uWSGI 文档在内的众多网站的建议设置了所有配置文件。然而,当我运行 file 命令时

paul@example:/$ sudo service uwsgi start
我得到以下信息:

开始:未知作业:uwsgi

我认为这是因为 Upstart 无法识别 uwsgi.conf 文件http://uwsgi-docs.readthedocs.org/en/latest/Upstart.html我在 /etc/init/ 中发现过。但检查后,我没有发现任何问题。

paul@example:/etc/init$ sudo vim uwsgi.conf
# Emperor uWSGI 脚本

启动前脚本
    logger “uWSGI Emperor 预启动”
结束脚本

启动后脚本
    logger“uWSGI Emperor 启动后”
结束脚本

描述“uWSGI 皇帝”

在运行级别启动 [2345]
在运行级别停止 [!2345]

重生

环境 LOGTO = /var/log/uwsgi.log

exec /usr/local/bin/uwsgi --master --die-on-term --emperor /etc/uwsgi/vassals --logto $LOGTO

我还检查了我的 /etc/uwsgi/vassals 文件,以确保它们正常工作。我现在唯一的文件是 mysite.ini 文件:

paul@example:/etc/uwsgi/vassals$ sudo vim mysite.ini 
[uwsgi]
基础 = /home/paul/djprojs/mysite/
chdir = %(基础)
主人=真
线程 = 20
套接字 = /tmp/sockets/%n.sock
主页 = /home/paul/.virtualenvs/dj
环境 = DJANGO_SETTINGS_MODULE=%n.设置
模块 = django.core.handlers.wsgi:WSGIHandler()

但对我来说这也看起来还可以。

最后,为了测试 uWSGI 是否可以从命令行运行,我没有使用 Upstart 来启动它。我运行

paul@exmaple/$ uwsgi --emperor /etc/uwsgi/vassals

并且有效:

*** 于 [2013年7月27日星期六 19:23:43] 启动 uWSGI 1.9.13 (32位) ***
编译版本:4.6.3,2013 年 7 月 21 日 03:35:50
操作系统:Linux-3.2.0-24-virtual #37-Ubuntu SMP 2012 年 4 月 25 日星期三 12:51:49 UTC
节点名称:example.me
机器:i686
时钟源:unix
检测到的 CPU 核心数:1
当前工作目录:/
检测到的二进制路径:/usr/local/bin/uwsgi
*** 警告:你正在运行没有主进程管理器的 uWSGI ***
您的进程数限制为 3922
您的内存页面大小为 4096 字节
检测到的最大文件描述符数:1024
*** 启动 uWSGI Emperor ***
*** 检测到 has_emperor 模式 (fd: 6) ***
[uWSGI] 从 mysite.ini 获取 INI 配置
*** 于 [2013年7月27日星期六 19:23:43] 启动 uWSGI 1.9.13 (32位) ***
编译版本:4.6.3,2013 年 7 月 21 日 03:35:50
操作系统:Linux-3.2.0-24-virtual #37-Ubuntu SMP 2012 年 4 月 25 日星期三 12:51:49 UTC
节点名称:example.me
机器:i686
时钟源:unix
检测到的 CPU 核心数:1
当前工作目录:/etc/uwsgi/vassals
检测到的二进制路径:/usr/local/bin/uwsgi
您的进程数限制为 3922
您的内存页面大小为 4096 字节
检测到的最大文件描述符数:1024
锁引擎:pthread 健壮互斥锁
uwsgi socket 0 绑定到 UNIX 地址 /tmp/sockets/mysite.sock fd 3
Python 版本:2.7.3(默认,2013 年 4 月 10 日,06:03:17)[GCC 4.6.3]
将 PythonHome 设置为 /home/paul/.virtualenvs/dj
Python 主解释器初始化于 0x9bdb000
已启用 Python 线程支持
您的服务器套接字侦听积压限制为 100 个连接
你对工人优雅操作的仁慈是 60 秒
为 20 个核心映射了 410112 字节 (400 KB)
*** 操作模式:螺纹 ***
WSGI 应用程序 0(mountpoint='')在解释器 0x9bdb000 pid 上 0 秒内准备就绪:18213(默认应用程序)
*** uWSGI 正在多解释器模式下运行 ***
生成 uWSGI 主进程 (pid: 18213)
生成 uWSGI worker 1 (pid: 18214, 核心: 20)

然后我就没有了 bash 提示符。uWSGI cli 显示所有服务器请求,并没有返回让我输入另一个命令。我真的觉得一定有更好的方法来做到这一点(即使用“sudo service uwsgi start/restart”),但我不确定如何做。我研究过这个邮政但我不确定不同的运行级别是否能解决当前的问题。

答案1

弄清楚。但我不确定我知道如何做。我认为是 uwsgi.conf 文件的 LOGTO 部分导致它不起作用。这是我现在的 uwsgi 皇帝文件:

描述“uWSGI 皇帝”

在运行级别启动 [2345]
在运行级别停止 [!2345]

重生

exec uwsgi --emperor /etc/uwsgi/vassals/ --master --uid www-data --gid www-data --logto /var/log/uwsgi/emperor.log

这是我的附庸,即 mysite.ini

[uwsgi]
基础 = /home/paul/djprojs/mysite
chdir = %(基础)
模块 = mysite.wsgi:应用程序
pid文件 = /tmp/uwsgi_vassal_%n.pid
套接字 = /tmp/sockets/%n.sock
真空 = 真
wsgi 文件 = /home/paul/djprojs/mysite/mysite/wsgi.py
主页 = /home/paul/.virtualenvs/dj

仍在研究如何清理它,但它运行得很漂亮。

答案2

该作业无效 - 只需运行“ init-checkconf job.conf”,它就会告诉您问题是什么:

ERROR: File /tmp/job.conf: syntax invalid:
init:aa.conf:18: Unexpected token

总之,env 节中的键和值之间不能有空格。请参阅 init(5) 了解节语法。

答案3

虽然这是一个老问题,但我怀疑我最近几个小时都在为同样的问题而绞尽脑汁。对我来说,uWSGI 试图处理它没有权限的文件夹中的文件。对相关目录进行简单的 chmod 即可解决所有问题(对我来说是日志文件)。问题一直看起来像是其他问题,但最终仅此而已。这可能不是您问题的真正答案,但希望它可以帮助其他像我一样受苦的人。

相关内容