2021-05-12 14:32:11
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:~$ 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
相關文章