利用forever在Linux上實現Node.js項目自啟動


在一台計算機上手動跑Node項目簡單,node xx.js就搞定了,想讓Node項目后台執行,盡管不能直接用node命令搞定,可是在安裝了forever這個包以后。還是非常輕松的。只是要是在遠程server上構建Node項目。假設沒法自啟動。一旦server重新啟動,那么項目必須通過管理員遠程手動開啟才干夠執行。

那么是否能利用forever加啟動腳本方式解決上述問題呢?答案當然是肯定的。僅僅只是有點麻煩。並且forever官方缺少具體的配置文檔。我在配置的時候也走了一些彎路,以下具體來說。


注:本文的實驗環境是Ubuntu Server 12.04 LTS x86_64,在CentOS上的配置更簡單一些


最早,我想着試試在/etc/rc.local中添加一句forever start xxx看看,結果發現Ubuntu(其它系統一樣)就不鳥我,主要矛盾就是mongodb使用這樣的方式就能夠跑起來,forever就不行。無奈之下,還是從/etc/init.d的角度去考慮吧。

首先感謝這篇文章和它的作者,http://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3,真是為數不多的珍貴資料!

前提是要先把forever好。方法非常easy,運行例如以下命令就好:

npm install forever -g

安裝完畢后,用一個簡單的Node程序測試一下:

forever start test.js
forever stop test.js
forever restart test.js

僅僅要不提示error,就表明forever是能夠用的,也就是說用forever來后台開啟一個Node項目的基本條件已經具備,剩下的就是來編寫一個啟動腳本了。

腳本的基本內容例如以下。感謝原作者的辛勤勞動:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          xiyoulib
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
# chkconfig: 345 88 08
# description: Forever for Node.js

DEAMON=/node.js/XiyouLibNodeExpress/bin/www   #這里須要填寫你自己的Node項目的啟動腳本文件
LOG=/node.js/log/log  #可選。日志文件文件夾
PID=/node.js/pid  #必填內容。用於記錄forever的進程號

export PATH=$PATH:/usr/local/bin  #在這里指定一下Node的可運行程序安裝文件夾,我的是/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules  #這里是Node類庫的路徑

#往下的內容就不用改動了

node=node
forever=forever

case "$1" in
    start)
        $forever start -l $LOG --pidFile $PID -a $DEAMON
        ;;
    stop)
        $forever stop --pidFile $PID $DEAMON
        ;;
    stopall)
        $forever stopall --pidFile $PID
        ;;
    restartall)
        $forever restartall --pidFile $PID
        ;;
    reload|restart)
        $forever restart -l $LOG --pidFile $PID -a $DEAMON
        ;;
    list)
        $forever list
        ;;
    *)
        echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
        exit 1
        ;;
esac

在這里提醒一下:最好為Node項目單獨在根文件夾下建立一個文件夾,如/node.js。然后權限設為754,這樣能夠避免一些權限問題而造成的麻煩。

因為用的是Ubuntu Server系統。上面還配置了MongoDB的啟動服務,並且在其init.d的腳本中增加了下面的語句:

# Required-Start:    $all
# Required-Stop:     $all
所以在以后自己加入的時候系統會提示錯誤,所以在Node項目的啟動腳本里我加了前面一串的說明凝視,以便Ubuntu Server系統進行設置,假設在CentOS上。應該不會出現類似的問題,這點要特別注意!


即下面的說明信息:

### BEGIN INIT INFO
# Provides:          xiyoulib
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
腳本編輯完畢后使用chkconfig --list指令查看一下自己加入的服務是否生效,即3和5所有要為on才干夠實現開機自啟動。

假設3和5沒有被置為on,那么請運行chkconfig --level 35 [你的服務名] on就可以。Ubuntu Server可能會報一些warning。可是僅僅要能將所需設置的服務的3、5變為on,其它的錯誤能夠忽略(我感覺這是系統自己的事)。

設置完畢后就可以實現Node項目在Linux上的自啟動,能夠shutdown -r now試一下是否能自啟,啟動好以后直接去訪問一下你設定的port號、虛擬文件夾神馬的,假設出來想要的就大功告成了。

可是假設不正確,就好好檢查一些腳本。然后依據報錯進行相關改動,畢竟我也是試出來的嘛。


原文地址:http://blog.csdn.net/yuanguozhengjust/article/details/37512993,轉載請注明出處!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM