node.js程序作為服務(wù)并在windows下開機(jī)自啟動(用forever)
前言
最近項(xiàng)目中有一塊服務(wù)是用node.js實(shí)現(xiàn)的,運(yùn)行環(huán)境是windows server 2008 R2,剛開始著手實(shí)現(xiàn)這塊功能的時候時間很緊迫,隨便寫了個console程序就部署上去了……啟動方式就是在 CMD 里輸入node main.js。
然而這樣搞肯定是不行的??!這樣搞的話,萬一有哪個 Error 沒捕獲到,整個服務(wù)就掛了,雖然咱寫的代碼很嚴(yán)謹(jǐn),跑了一個多月也沒掛,但為了萬無一失,還是得有個自動重啟的能力。
而且更關(guān)鍵的問題是……現(xiàn)在這樣好low啊……開機(jī)后需要手動啟動,而且運(yùn)行的時候一直會顯示一個 console ……這根本就忍不了??!
目標(biāo):
- 支持崩潰后自動重啟
- 支持后臺運(yùn)行
- 開機(jī)自動啟動
自動重啟和后臺運(yùn)行
因?yàn)?javascript 的單線程運(yùn)行方式,一點(diǎn)錯誤就徹底崩潰的特性,自動重啟的解決方案自然也早就有了,比如 pm2 和 forever ,從功能上看,pm2 比 forever 要強(qiáng)大不少,然而我只想要個 "Keep Alive" ,所以我選擇了 forever.
先全局安裝 forever
npm install -g forever
然后把啟動用的bat腳本修改一下……
舊的啟動腳本:
node d:\xxx\main.js
使用 forever 后的:
forever start -o out.log -e err.log d:\xxx\main.js
如果不出問題的話,應(yīng)該就可以了~
然而每次你這樣想的時候,就該出問題了_(:з)∠)_
forever 這家伙居然不認(rèn) windows 下的絕對路徑…… 假如我是在c:\Users\Administrator下執(zhí)行的命令,那么 forever 就會嘗試去 c:\Users\Administrator\d:\xxx\下面尋找main.js……

沒錯,除非路徑的第一個字符是 / ,否則就會被當(dāng)成相對路徑來處理。
或許是我用不慣windows的緣故,反正我是沒找到好的解決辦法,最終迫于無奈,在bat腳本中手動切換了一下盤符處理了
最后的腳本:
@echo off d: forever start -o xxx/logs/out.log -e xxx/logs/err.log --uid "communityWorker" xxx/main.js
其實(shí)我總是感覺這種做法不太對,但對 windows 實(shí)在不熟悉,如果誰有更好的辦法也請?jiān)u論告訴我
開機(jī)自動啟動
既然是自動啟動嘛,我首先想到的就是注冊一個自啟動的服務(wù),然而注冊的似乎只能是一個exe,用bat注冊服務(wù)會報出一個 1053 的錯誤

注冊服務(wù)不行……那就只好用計(jì)劃任務(wù)了……
新建一個計(jì)劃任務(wù),然后系統(tǒng)啟動時的觸發(fā)器,由這個計(jì)劃任務(wù)來執(zhí)行我們的bat


嘛……這種方法最后是生效了,唯一需要注意的就是安全選項(xiàng)中,一定要選中 "不管用戶是否登錄都要運(yùn)行" 的選項(xiàng)!!
否則會在系統(tǒng)啟動觸發(fā)器被觸發(fā)的時候,因?yàn)闆]有用戶登錄,所以直接跳過了這個計(jì)劃任務(wù),進(jìn)而無法啟動我們的服務(wù)。

雖然還有不完善的地方,但確實(shí)實(shí)現(xiàn)了預(yù)期的效果;最后說一句……windows服務(wù)器真TM麻煩……
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
nodejs清空/刪除指定文件夾下面所有文件或文件夾的方法示例
這篇文章主要介紹了nodejs清空/刪除指定文件夾下面所有文件或文件夾的方法,通過兩個具體案例形式分析了node.js同步刪除文件/文件夾,以及異步刪除文件/文件夾的相關(guān)實(shí)現(xiàn)技巧,涉及遞歸遍歷與文件判斷、回調(diào)等相關(guān)操作,需要的朋友可以參考下2023-04-04
Express使用multer實(shí)現(xiàn)文件上傳的示例代碼
這篇文章主要介紹了Express 使用 multer 實(shí)現(xiàn)文件上傳的操作步驟,文中通過代碼示例和圖文結(jié)合的方式講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03
Node.js API詳解之 string_decoder用法實(shí)例分析
這篇文章主要介紹了Node.js API詳解之 string_decoder用法,結(jié)合實(shí)例形式分析了Node.js API中string_decoder的功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
玩轉(zhuǎn)NODE.JS(四)-搭建簡單的聊天室的代碼
本篇文章主要介紹了利用NODE.JS搭建簡單的聊天室的代碼,有需要的可以了解一下。2016-11-11
NodeJS簡單實(shí)現(xiàn)WebSocket功能示例
這篇文章主要介紹了NodeJS簡單實(shí)現(xiàn)WebSocket功能,結(jié)合具體實(shí)例形式分析了nodejs實(shí)現(xiàn)WebSocket通信功能的客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2018-02-02

