edx启动过程分析

首先看看/etc/init里面的文件:

可以看到该目录下都是一些开机要启动的程序的配置文件,文件的扩展名都是conf,其中跟edx运行有关的至少有:

mysql.conf    mongod.conf  supervisor.conf

前两者都是数据库的启动文件。第三个supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

我们看看文件supervisor.conf的内容:

这个配置文件的意思的开机时运行程序:

/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/app/supervisor/conf.d/lms.conf

注意其中运行了gunicorn。再看看它的配置文件

/edx/app/edxapp/lms_gunicorn.py内容:

现在应该明白了:edx是一个通过支持wsgi应用的gunicorn部署的Django应用软件。

目录/etc/init分析到这里,我们不要忘记最开始我们说到Upstart是兼容sysvinit的,怎么做到的?在/etc/init/下有两个重要的配置文件:rc-sysinit.conf和rc.conf。前者rc-sysinit.conf中有:

env DEFAULT_RUNLEVEL=2

说明系统的运行级别为2:

我们也可以这样查看

N 2

由于Upstart兼容SystemV,现在由Upstart通过运行rc再运行/etc/init.d/rc2

这个命令,再来完成/etc/rc2.d/下相应程序的启动。

(为什么不选择常用的运行级3呢?不清楚.)

进入目录/etc/rc2.d查看系统启动时启动了哪些程序:

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服务器。

仓促而就,错误在所难免。

猜你喜欢

转载自www.linuxidc.com/Linux/2016-10/135864.htm