首頁 > 軟體

edx啟動過程分析

2020-06-16 17:31:01

我是在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


IT145.com E-mail:sddin#qq.com