在Linux上用forever實(shí)現(xiàn)Node.js項(xiàng)目自啟動(dòng)
那么能否利用forever加啟動(dòng)腳本方式解決上述問(wèn)題呢?答案當(dāng)然是肯定的,只不過(guò)有點(diǎn)麻煩,而且forever官方缺少詳細(xì)的配置文檔。我在配置的時(shí)候也走了一些彎路,下面詳細(xì)來(lái)說(shuō)。
注:本文的實(shí)驗(yàn)環(huán)境是Ubuntu Server 12.04 LTS x86_64,在CentOS上的配置更簡(jiǎn)單一些
最早,我想著試試在/etc/rc.local中增加一句forever start xxx看看,結(jié)果發(fā)現(xiàn)Ubuntu(其他系統(tǒng)一樣)就不鳥(niǎo)我,主要矛盾就是mongodb使用這種方式就可以跑起來(lái),forever就不行,無(wú)奈之下,還是從/etc/init.d的角度去考慮吧。
前提是要先把forever好,方法很簡(jiǎn)單,執(zhí)行如下命令就好:
npm install forever -g
安裝完成后,用一個(gè)簡(jiǎn)單的Node程序測(cè)試一下:
forever start test.js forever stop test.js forever restart test.js
只要不提示error,就表明forever是可以用的,也就是說(shuō)用forever來(lái)后臺(tái)開(kāi)啟一個(gè)Node項(xiàng)目的基本條件已經(jīng)具備,剩下的就是來(lái)編寫一個(gè)啟動(dòng)腳本了。
腳本的基本內(nèi)容如下,感謝原作者的辛勤勞動(dòng):
#!/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項(xiàng)目的啟動(dòng)腳本文件
LOG=/node.js/log/log #可選,日志文件目錄
PID=/node.js/pid #必填內(nèi)容,用于記錄forever的進(jìn)程號(hào)
export PATH=$PATH:/usr/local/bin #在這里指定一下Node的可執(zhí)行程序安裝目錄,我的是/usr/local/bin
export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules #這里是Node類庫(kù)的路徑
#往下的內(nèi)容就不用修改了
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項(xiàng)目單獨(dú)在根目錄下建立一個(gè)目錄,如/node.js,然后權(quán)限設(shè)為754,這樣可以避免一些權(quán)限問(wèn)題而造成的麻煩!
由于用的是Ubuntu Server系統(tǒng),上面還配置了MongoDB的啟動(dòng)服務(wù),而且在其init.d的腳本中加入了以下的語(yǔ)句:
# Required-Start: $all # Required-Stop: $all
所以在以后自己添加的時(shí)候系統(tǒng)會(huì)提示錯(cuò)誤,所以在Node項(xiàng)目的啟動(dòng)腳本里我加了前面一串的說(shuō)明注釋,以便Ubuntu Server系統(tǒng)進(jìn)行設(shè)置,如果在CentOS上,應(yīng)該不會(huì)出現(xiàn)類似的問(wèn)題,這點(diǎn)要特別注意!
即以下的說(shuō)明信息:
### 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指令查看一下自己添加的服務(wù)是否生效,即3和5全部要為on才可以實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng)。
如果3和5沒(méi)有被置為on,那么請(qǐng)執(zhí)行chkconfig --level 35 [你的服務(wù)名] on即可,Ubuntu Server可能會(huì)報(bào)一些warning,但是只要能將所需設(shè)置的服務(wù)的3、5變?yōu)閛n,其他的錯(cuò)誤可以忽略(我感覺(jué)這是系統(tǒng)自己的事)。
設(shè)置完成后即可實(shí)現(xiàn)Node項(xiàng)目在Linux上的自啟動(dòng),可以shutdown -r now試一下能否自啟,啟動(dòng)好以后直接去訪問(wèn)一下你設(shè)定的端口號(hào)、虛擬目錄神馬的,如果出來(lái)想要的就大功告成了!
但是如果不對(duì),就好好檢查一些腳本,然后根據(jù)報(bào)錯(cuò)進(jìn)行相關(guān)修改,畢竟我也是試出來(lái)的嘛!
相關(guān)文章
Linux使用Node.js建立訪問(wèn)靜態(tài)網(wǎng)頁(yè)的服務(wù)實(shí)例詳解
這篇文章主要介紹了Linux使用Node.js建立訪問(wèn)靜態(tài)網(wǎng)頁(yè)的服務(wù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
nodejs發(fā)布靜態(tài)https服務(wù)器步驟指南
這篇文章主要為大家介紹了nodejs發(fā)布靜態(tài)https服務(wù)器的步驟指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
nodejs使用express獲取get和post傳值及session驗(yàn)證的方法
這篇文章主要介紹了nodejs使用express獲取get和post傳值及session驗(yàn)證的方法,結(jié)合實(shí)例形式分析了nodejs使用express實(shí)現(xiàn)獲取get和post傳值及session驗(yàn)證功能的具體操作步驟與注意事項(xiàng),需要的朋友可以參考下2017-11-11
Node.js中使用計(jì)時(shí)器定時(shí)執(zhí)行函數(shù)詳解
這篇文章主要介紹了Node.js中使用計(jì)時(shí)器定時(shí)執(zhí)行函數(shù)詳解,本文使用了Node.js中的setTimeout和setInterval函數(shù),需要的朋友可以參考下2014-08-08
前端自動(dòng)化開(kāi)發(fā)之Node.js的環(huán)境搭建教程
這篇文章主要介紹了前端自動(dòng)化開(kāi)發(fā)之Node.js環(huán)境搭建的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04
編譯打包nodejs服務(wù)代碼如何部署到服務(wù)器
這篇文章主要介紹了編譯打包nodejs服務(wù)代碼如何部署到服務(wù)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
NodeJs 實(shí)現(xiàn)簡(jiǎn)單WebSocket即時(shí)通訊的示例代碼
這篇文章主要介紹了NodeJs 實(shí)現(xiàn)簡(jiǎn)單WebSocket即時(shí)通訊的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

