我是在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:~$ runlevel
N 2
由于Upstart兼容SystemV,现在由Upstart通过运行rc再运行/etc/init.d/rc2
这个命令,再来完成/etc/rc2.d/下相应程序的启动。
(为什么不选择常用的运行级3呢?不清楚.)
进入目录/etc/rc2.d查看系统启动时启动了哪些程序:
linuxidc@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.linuxidc.com/Linux/2016-10/135864.htm