红联Linux门户
Linux帮助

edx启动过程分析

发布时间:2016-10-11 11:56:22来源:linux网站作者:东莞文老师
我是在Ubuntu-14.04.05的系统里安装的edx,这个版本的Ubuntu的启动系统应该是upstart---相比于BSD,Linux的启动系统种类多而繁杂,变化快,一会是SystemV,一会是Upstart,一会又是Systemd,几乎让我抓狂---但是Ubuntu同时也兼容SystemV的启动方式,这就使复杂问题更复杂了。
 
首先看看/etc/init里面的文件:
edx启动过程分析
可以看到该目录下都是一些开机要启动的程序的配置文件,文件的扩展名都是conf,其中跟edx运行有关的至少有:
mysql.conf    mongod.conf  supervisor.conf
前两者都是数据库的启动文件。第三个supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
 
我们看看文件supervisor.conf的内容:
edx启动过程分析
这个配置文件的意思的开机时运行程序:
/edx/app/supervisor/venvs/supervisor/bin/supervisord
并读取配置文件/edx/app/supervisor/supervisord.conf
配置文件/edx/app/supervisor/conf.available.d/lms.conf中有如下语句:
[include]
files= /edx/app/supervisor/conf.d/*.conf
 
所以查询一下/edx/app/supervisor/conf.d目录下的文件:
edx启动过程分析
我们再打开文件/edx/app/supervisor/conf.d/lms.conf
edx启动过程分析
注意其中运行了gunicorn。再看看它的配置文件
/edx/app/edxapp/lms_gunicorn.py内容:
edx启动过程分析
现在应该明白了:edx是一个通过支持wsgi应用的gunicorn部署的Django应用软件。
 
目录/etc/init分析到这里,我们不要忘记最开始我们说到Upstart是兼容sysvinit的,怎么做到的?在/etc/init/下有两个重要的配置文件:rc-sysinit.conf和rc.conf。前者rc-sysinit.conf中有:
env DEFAULT_RUNLEVEL=2
说明系统的运行级别为2:
我们也可以这样查看
wen@ubuntu-140405:~$runlevel
N2
由于Upstart兼容SystemV,现在由Upstart通过运行rc再运行/etc/init.d/rc2
这个命令,再来完成/etc/rc2.d/下相应程序的启动。
(为什么不选择常用的运行级3呢?不清楚.)
 
进入目录/etc/rc2.d查看系统启动时启动了哪些程序:
wen@ubuntu-140405:/etc/rc2.d$ ls | more
README
S20memcached
S20nginx
S20postfix
S20rabbitmq-server
S20rsync
S20screen-cleanup
S23ntp
S70dns-clean
S70pppd-dns
S95elasticsearch
S99grub-common
S99ondemand
S99rc.local
 
继续查看/etc/nginx/nginx.conf,关键在于最后:
include /edx/app/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
 
前面/edx/app/nginx/conf.d/目录下并没有内容,看看后面:
$ ls -l /etc/nginx/sites-enabled/
lrwxrwxrwx 1 root root 36 Aug 29 10:54 certs ->/edx/app/nginx/sites-available/certs
lrwxrwxrwx 1 root root 34 Aug 29 10:54 cms ->/edx/app/nginx/sites-available/cms
lrwxrwxrwx 1 root root 42 Aug 29 10:54 edx-release-> 
/edx/app/nginx/sites-available/edx-release
lrwxrwxrwx 1 root root 36 Aug 29 10:54 forum-> 
/edx/app/nginx/sites-available/forum
lrwxrwxrwx 1 root root 34 Aug 29 10:54 lms ->/edx/app/nginx/sites-available/lms
lrwxrwxrwx 1 root root 37 Aug 29 10:54 xqueue->
/edx/app/nginx/sites-available/xqueue
 
再看看lms的配置文件,你可以做个最基本的配置修改,如修改端口号,同时也看到通过这个配置文件,nginx、gunicorn和django很好地开始协作。
 
现在我们应该得到这个结论:edx的主体部分是一个基于django框架的应用程序,它通过gunicorn部署到nginx服务器。现在的系统通过开机应用程序init在开机的时候就启动配置好的nginx服务器和其他包括数据库服务器等应用服务器,并通过supervisor软件启动gunicorn,将edx这个django这个应用软件部署到nginx服务器。
 
仓促而就,错误在所难免。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/24935.html