這下麻煩可大了,我們這個自動啟動的需求,該如何滿足?
還好,在 Linux 的世界,有個名為:「supervisor」的工具軟體。這套軟體的用途為:提供使用者,可對 UNIX-like 作業系統上執行的程式(processes),進行監視及控管。
透過這套工具,能讓我們將開發好的 Web Application,當成作業系統的服務(System Service)來用;而「作業系統的服務」因為可設成開機後自動啟動,所以,以上所述的需求,自然就能滿足了。
以下的安裝、設定程序,系以下列所示之環境為前題,因此,讀者在使用的時候,可能無法照著全抄,得需配合個人的環境,進行調整。
- Node執行檔安裝之目錄路徑: /usr/bin/local/node
- Express Web Application的安裝路徑: /web/todos/app.js
- Express Web Log檔存放路徑:/web/logs
執行程序
(1)安裝supervisor套件。
$ sudo easy_install supervisor
(2)透過指令產生「設定檔」。
$ sudo echo_supervisord_conf > /etc/supervisord.conf
(3)編輯設定檔,加入Node.JS Web App。
$ sudo vim /etc/supervisord.conf
在檔案的最底端,添加如下內容:
[program:myWebApp]
command=/usr/local/bin/node app.js
directory=/web/todos
command=/usr/local/bin/node app.js
directory=/web/todos
autostart=true
autorestart=unexpected
startsecs=2
startretries=3
exitcodes=0,2
stdout_logfile=/web/logs/myWebApp.log- program之後的名稱:myWebApp非強制性的規範,可由個人自行決定。
- Express Web的主程式app.js檔,其存放目錄路徑為「/web/todos」,但在「command」欄位,沒有標示出app.js檔案所在目錄路徑;反而標明在「directory」欄位中,這點須請留心。
- 以上設定檔的「directory」、「stdout_logfile」、「command」欄位,很可能跟讀者的環境不同,請依個人需求自行修改。
(4)在路徑為:「/etc/rc.d/init.d」的目錄下,建立名為「supervisord.sh」的bash指令稿檔案。
$ sudo vim /etc/rc.d/init.d/supervisord.sh
完成編輯後,bash指令稿檔案的內容:
#!/bin/sh
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord
# Source init functions
. /etc/rc.d/init.d/functions
prog="supervisord"
prefix="/usr/"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"
start()
{
echo -n $"Starting $prog: "
daemon $prog_bin --pidfile $PIDFILE
[ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
echo
}
stop()
{
echo -n $"Shutting down $prog: "
[ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac
#
# /etc/rc.d/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord
# Source init functions
. /etc/rc.d/init.d/functions
prog="supervisord"
prefix="/usr/"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"
start()
{
echo -n $"Starting $prog: "
daemon $prog_bin --pidfile $PIDFILE
[ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
echo
}
stop()
{
echo -n $"Shutting down $prog: "
[ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac
(5)設定supervisord.sh,使能開機後,自動執行。
5-1) 變更 supervisord.sh 檔案權限,使其可「執行」。
$ sudo chmod +x /etc/rc.d/init.d/supervisord.sh
5-2) 確認 supervisord.sh 檔案己具備可執行之權限。
$ ls -al /etc/rc.d/init.d/supervisord.sh
-rwxr-xr-x 1 root root 993 2013-10-31 07:38 /etc/rc.d/init.d/supervisord.sh
5-3) 查詢 supervisord.sh 檔案,在「作業系統服務 (System Service)」的「操作環境級別(Run Level)」。不過,以下的指令,最主要的目的,是要透過無法正常執行的結果,來證實 supervisord.sh 尚未完成註冊動作,所以無法查詢其「操作環境級別」,只會獲得錯誤訊息。-rwxr-xr-x 1 root root 993 2013-10-31 07:38 /etc/rc.d/init.d/supervisord.sh
$ chkconfig --list supervisord.sh
supervisord.sh 服務支援 chkconfig,但未向任何執行等級註冊(請執行 'chkconfig --add supervisord.sh')
5-4) 將 supervisord.sh 註冊成作業系統的「服務」。supervisord.sh 服務支援 chkconfig,但未向任何執行等級註冊(請執行 'chkconfig --add supervisord.sh')
$ sudo chkconfig --add supervisord.sh
5-5) 設定 supervisord.sh 服務的操作環境級別,使之可以在作業系統完成開機後,便能自動啟動。
$ sudo chkconfig supervisord.sh on
5-6) 查詢 supervisord.sh 檔案,在作業系統「服務」中的「操作環境級別」(2,3,4,5)。
$ chkconfig --list supervisord.sh
supervisord.sh 0:關閉 1:關閉 2:開啟 3:開啟 4:開啟 5:開啟 6:關閉
supervisord.sh 0:關閉 1:關閉 2:開啟 3:開啟 4:開啟 5:開啟 6:關閉
完成以上設定工作後,請重開機。於確定重開機完成後,請找台 Web Client 端的電腦,打開 Web 瀏覽器,輸入網址,確認是否能連上你的 Web Application ,以便驗證此文所述之需求己經達成。
關於 Supervisor 的網路參考文章:
關於 Supervisor 的網路參考文章:
沒有留言:
張貼留言