我正在尝试在我的 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 即可解决所有问题(对我来说是日志文件)。问题一直看起来像是其他问题,但最终仅此而已。这可能不是您问题的真正答案,但希望它可以帮助其他像我一样受苦的人。