将uWSGI连接到Ubuntu 16.04上的Django和nginx

我正在试图按照这个教程来设置Ubuntu 16.04上的Djangonginx uWSGI

这一切工作正常,直到最后一步(哦,讽刺…),我试图执行此命令:

 sudo service uwsgi start 

如果失败,出现以下错误:

无法启动uwsgi.service:找不到单位uwsgi.service。

其他人似乎也得到了类似的错误:

无法启动uwsgi.service:单位uwsgi.service未能加载:没有这样的文件或目录。

这个问题似乎与Ubuntu的版本有关。 虽然这个教程是针对Ubuntu 14.04的,但它似乎不适用于较新的版本,因为在版本15中,Ubuntu从upstart init守护进程切换到了systemd init守护进程 。

我怎样才能使用systemd来启动uWSGI,以便它与nginx和Django一起工作?

一个需要修改的是/etc/uwsgi/sites/firstsite.ini文件。 所需的唯一更改是将权限从664replace为666 。 该脚本将如下所示:

 [uwsgi] project = firstsite base = /home/user chdir = %(base)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application master = true processes = 5 socket = %(base)/%(project)/%(project).sock chmod-socket = 666 vacuum = true 

其次 ,因为我们使用的是systemd而不是upstart ,所以不需要以下文件,可以将其删除: /etc/init/uwsgi.conf

第三 ,我们在/etc/systemd/system/uwsgi.service创build了以下systemd脚本:

 [Unit] Description=uWSGI Emperor service After=syslog.target [Service] ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target 

用这个新的uWSGI服务刷新systemd init系统的状态

 sudo systemctl daemon-reload 

为了启动脚本,您需要运行以下命令:

 sudo systemctl start uwsgi 

为了在启动时启动uWSGI ,您还需要:

 sudo systemctl enable uwsgi 

您可以使用以下来检查其状态:

 systemctl status uwsgi 

一些进一步的细节可以在这里find。

为了解决这个错误: sudo systemctl daemon-reloadsudo systemctl daemon-reloaduwsgi.service文件。

为了使每次重新启动服务启动: sudo systemctl enable uwsgi