歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> edx啟動過程分析

edx啟動過程分析

日期:2017/2/28 13:48:18   编辑:Linux教程

我是在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服務器。

倉促而就,錯誤在所難免。

Copyright © Linux教程網 All Rights Reserved