我正在试图按照这个教程来设置Ubuntu 16.04上的Django和nginx 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-reload新sudo systemctl daemon-reload的uwsgi.service文件。
为了使每次重新启动服务启动: sudo systemctl enable uwsgi 。