Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / edx启动过程分析

我是在Ubuntu-14.04.05的系统里安装的edx,这个版本的Ubuntu的启动系统应该是upstart---相比于BSD,Linux的启动系统种类多而繁杂,变化快,一会是SystemV,一会是Upstart,一会又是Systemd,  几乎让我抓狂---但是Ubuntu同时也兼容SystemV的启动方式,这就使复杂问题更复杂了。首先看看/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:我们也可以这样查看linuxidc@ubuntu-140405:~$ runlevelN 2由于Upstart兼容SystemV,现在由Upstart通过运行rc再运行/etc/init.d/rc2这个命令,再来完成/etc/rc2.d/下相应程序的启动。(为什么不选择常用的运行级3呢?不清楚.)进入目录/etc/rc2.d查看系统启动时启动了哪些程序:linuxidc@ubuntu-140405:/etc/rc2.d$ ls | moreREADMES20memcachedS20nginxS20postfixS20rabbitmq-serverS20rsyncS20screen-cleanupS23ntpS70dns-cleanS70pppd-dnsS95elasticsearchS99grub-commonS99ondemandS99rc.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/certslrwxrwxrwx 1 root root 34 Aug 29 10:54 cms -> /edx/app/nginx/sites-available/cmslrwxrwxrwx 1 root root 42 Aug 29 10:54 edx-release ->/edx/app/nginx/sites-available/edx-releaselrwxrwxrwx 1 root root 36 Aug 29 10:54 forum ->/edx/app/nginx/sites-available/forumlrwxrwxrwx 1 root root 34 Aug 29 10:54 lms -> /edx/app/nginx/sites-available/lmslrwxrwxrwx 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服务器。仓促而就,错误在所难免。本文永久更新链接地址