问题描述
我正在尝试遵循this tutorial在Ubuntu16.04上使用Django和nginx设置uWSGI。
一切正常,直到我尝试执行此命令的最后一步(哦,具有讽刺意味的…):
sudo service uwsgi start
如果失败并出现以下错误:
Failed to start uwsgi.service: Unit uwsgi.service not found.
其他人似乎也遇到类似的错误:
Failed to start uwsgi.service: Unit uwsgi.service failed to load: No such file or directory.
该问题似乎与Ubuntu版本有关。虽然该教程针对的是Ubuntu 14.04,但它似乎不适用于较新的版本,因为在版本15中,Ubuntu从upstart
初始化守护程序切换到了systemd
初始化守护程序。
如何使用systemd
启动uWSGI,使其与nginx和Django兼容?
最佳方法
所需的第一个修改是对/etc/uwsgi/sites/firstsite.ini
文件。唯一需要做的更改是将权限从664
替换为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
处创建以下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初始化系统的状态
sudo systemctl daemon-reload
为了启动脚本,您需要运行以下命令:
sudo systemctl start uwsgi
为了在重新启动时启动uWSGI
,您还需要:
sudo systemctl enable uwsgi
您可以使用以下方法检查其状态:
systemctl status uwsgi
可以找到更多详细信息here。