上一回,我们已经把nginx+uwsgi+django搭建起来了。
这一次,我们先把主机重启一下,然后用浏览器打开 http://主机IP地址,502错误重现了!
看来是因为uwsgi没有开机自启动,那我们来让他启动吧:
因为在上一节中,只在虚拟环境中安装uwsgi,首先进入虚拟环境
muchun@web:~$ source ~/venv/bin/activate
(venv) muchun@web:~$
通过ini配置文件启动uwsgi
(venv) muchun@web:~$ cd uwsgi
(venv) muchun@web:~/uwsgi$ uwsgi --ini mysite.ini
[uWSGI] getting INI configuration from mysite.ini
用浏览器打开 http://主机IP地址,小火箭再次回归!
假如希望把uwsgi关闭,应该:
(venv) muchun@web:~/uwsgi$ uwsgi --stop mysite.pid
这时用浏览器观察,应该是502错误了。
问题1:非要进入虚拟环境才可以启动uwsgi吗?不在虚拟环境内可以启动uwsgi吗?*
答案是可以的。
做法:我们要知道uwsgi的具体位置,方法是在虚拟环境中使用which命令,接着退出虚拟环境,然后再通过绝对路径来运行uwsgi
(venv) muchun@web:~/uwsgi$ which uwsgi
/home/muchun/venv/bin/uwsgi
(venv) muchun@web:~/uwsgi$ deactivate
muchun@web:~/uwsgi$ /home/muchun/venv/bin/uwsgi --ini ~/uwsgi/mysite.ini
[uWSGI] getting INI configuration from /home/muchun/uwsgi/mysite.ini
muchun@web:~/uwsgi$
通过以上做法,不用进入虚拟环境便可启动虚拟环境内的uwsgi。
问题2:每次重启关机后,都要手动启动uwsgi,能不能实现开机自启动?
答案:可以。
做法:
在/etc/init.d/下新建一个脚本mysite.sh
脚本内容:
muchun@web:/etc/init.d$ cat mysite.sh
#!/bin/bash
/home/muchun/venv/bin/uwsgi /home/muchun/uwsgi/mysite.ini
exit 0
记住,还要让新建的脚本可执行,通过update-rc.d命令加入开机项
muchun@web:/etc/init.d$ sudo chmod +x mysite.sh
muchun@web:/etc/init.d$ sudo update-rc.d mysite.sh defaults
重启主机,浏览器观察小火箭出现,成功!
但是,你会发现每次重启主机,都要等上一两分钟,好像是卡在某个进程,假如你手动关掉uwsgi后,重启就会很快就完成,应该是系统没有关闭uwsgi的方法,等上一两分钟来强行结束他。
既然系统不知道,那就让我们来告诉它如何来关闭uwsgi吧!做法就是对之前的脚本进行修改
muchun@web:~$ cat /etc/init.d/mysite.sh
#!/bin/bash
#/home/muchun/venv/bin/uwsgi /home/muchun/uwsgi/mysite.ini
#exit 0
case "$1" in
start)
# run at boot
/home/muchun/venv/bin/uwsgi --ini /home/muchun/uwsgi/mysite.ini
;;
stop)
# run at shutdown
/home/muchun/venv/bin/uwsgi --stop /home/muchun/uwsgi/mysite.pid
;;
*)
;;
esac
至此,uwsgi在每次开机和关机时都能够得到正确的运行和关闭了。