为什么 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

不幸的是,这在 upstart 脚本中很难调试。问题出在你的行上:

env LOGTO = /var/log/uwsgi.log

'=' 两边不能有空格。只需更改为:

env LOGTO=/var/log/uwsgi.log

恐怕我不知道 uWSGI 东西是否坏了,但这至少应该能让你的新贵工作得到认可。

相关内容