欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs進(jìn)程管理模塊forever詳解

 更新時(shí)間:2014年06月01日 11:14:57   作者:  
服務(wù)器管理是系統(tǒng)上線后,必須要面對(duì)的問(wèn)題。最好有一個(gè)軟件可以提供整套的服務(wù)器運(yùn)行解決方案:要求運(yùn)行穩(wěn)定,支持高并發(fā),啟動(dòng)/停止命令簡(jiǎn)單,支持熱部署,宕機(jī)重啟,監(jiān)控界面和日志,集群環(huán)境。

接下來(lái),就讓我們看看forever能不能實(shí)現(xiàn)目標(biāo)。

一、forever介紹

forever是一個(gè)簡(jiǎn)單的命令式nodejs的守護(hù)進(jìn)程,能夠啟動(dòng),停止,重啟App應(yīng)用。forever完全基于命令行操作,在forever進(jìn)程之下,創(chuàng)建node的子進(jìn)程,通過(guò)monitor監(jiān)控node子進(jìn)程的運(yùn)行情況,一旦文件更新,或者進(jìn)程掛掉,forever會(huì)自動(dòng)重啟node服務(wù)器,確保應(yīng)用正常運(yùn)行。

二、 forever安裝

全局安裝forever

復(fù)制代碼 代碼如下:

~ D:\workspace\javascript>npm install -g forever
D:\toolkit\nodejs\forever -> D:\toolkit\nodejs\node_modules\forever\bin\forever
D:\toolkit\nodejs\foreverd -> D:\toolkit\nodejs\node_modules\forever\bin\foreverd

查看forever幫助
復(fù)制代碼 代碼如下:

~ D:\workspace\javascript>forever -h
help: usage: forever [action] [options] SCRIPT [script-options]
help:
help: Monitors the script specified in the current process or as a daemon
help:
help: actions:
help: start Start SCRIPT as a daemon
help: stop Stop the daemon SCRIPT
help: stopall Stop all running forever scripts
help: restart Restart the daemon SCRIPT
help: restartall Restart all running forever scripts
help: list List all running forever scripts
help: config Lists all forever user configuration
help: set <key> <val> Sets the specified forever config <key>
help: clear <key> Clears the specified forever config <key>
help: logs Lists log files for all forever processes
help: logs <script|index> Tails the logs for <script|index>
help: columns add <col> Adds the specified column to the output in `forever list`
help: columns rm <col> Removed the specified column from the output in `forever list`
help: columns set <cols> Set all columns for the output in `forever list`
help: cleanlogs [CAREFUL] Deletes all historical forever log files
help:
help: options:
help: -m MAX Only run the specified script MAX times
help: -l LOGFILE Logs the forever output to LOGFILE
help: -o OUTFILE Logs stdout from child script to OUTFILE
help: -e ERRFILE Logs stderr from child script to ERRFILE
help: -p PATH Base path for all forever related files (pid files, etc.)
help: -c COMMAND COMMAND to execute (defaults to node)
help: -a, --append Append logs
help: -f, --fifo Stream logs to stdout
help: -n, --number Number of log lines to print
help: --pidFile The pid file
help: --sourceDir The source directory for which SCRIPT is relative to
help: --minUptime Minimum uptime (millis) for a script to not be considered "spinning"
help: --spinSleepTime Time to wait (millis) between launches of a spinning script.
help: --colors --no-colors will disable output coloring
help: --plain alias of --no-colors
help: -d, --debug Forces forever to log debug output
help: -v, --verbose Turns on the verbose messages from Forever
help: -s, --silent Run the child script silencing stdout and stderr
help: -w, --watch Watch for file changes
help: --watchDirectory Top-level directory to watch from
help: --watchIgnore To ignore pattern when watch is enabled (multiple option is allowed)
help: -h, --help You're staring at it
help:
help: [Long Running Process]
help: The forever process will continue to run outputting log messages to the console.
help: ex. forever -o out.log -e err.log my-script.js
help:
help: [Daemon]
help: The forever process will run as a daemon which will make the target process start
help: in the background. This is extremely useful for remote starting simple node.js scripts
help: without using nohup. It is recommended to run start with -o -l, & -e.
help: ex. forever start -l forever.log -o out.log -e err.log my-daemon.js
help: forever stop my-daemon.js
help:

我們看到forever支持的命令和配置項(xiàng)確實(shí)不少,應(yīng)該是偏命令行的管理工具。

三、forever命令行的中文解釋

子命令actions:

復(fù)制代碼 代碼如下:

start:啟動(dòng)守護(hù)進(jìn)程
stop:停止守護(hù)進(jìn)程
stopall:停止所有的forever進(jìn)程
restart:重啟守護(hù)進(jìn)程
restartall:重啟所有的foever進(jìn)程
list:列表顯示forever進(jìn)程
config:列出所有的用戶配置項(xiàng)
set <key> <val>: 設(shè)置用戶配置項(xiàng)
clear <key>: 清楚用戶配置項(xiàng)
logs: 列出所有forever進(jìn)程的日志
logs <script|index>: 顯示最新的日志
columns add <col>: 自定義指標(biāo)到forever list
columns rm <col>: 刪除forever list的指標(biāo)
columns set<cols>: 設(shè)置所有的指標(biāo)到forever list
cleanlogs: 刪除所有的forever歷史日志

配置參數(shù)options:
復(fù)制代碼 代碼如下:

-m MAX: 運(yùn)行指定腳本的次數(shù)
-l LOGFILE: 輸出日志到LOGFILE
-o OUTFILE: 輸出控制臺(tái)信息到OUTFILE
-e ERRFILE: 輸出控制臺(tái)錯(cuò)誤在ERRFILE
-p PATH: 根目錄
-c COMMAND: 執(zhí)行命令,默認(rèn)是node
-a, –append: 合并日志
-f, –fifo: 流式日志輸出
-n, –number: 日志打印行數(shù)
–pidFile: pid文件
–sourceDir: 源代碼目錄
–minUptime: 最小spinn更新時(shí)間(ms)
–spinSleepTime: 兩次spin間隔時(shí)間
–colors: 控制臺(tái)輸出著色
–plain: –no-colors的別名,控制臺(tái)輸出無(wú)色
-d, –debug: debug模式
-v, –verbose: 打印詳細(xì)輸出
-s, –silent: 不打印日志和錯(cuò)誤信息
-w, –watch: 監(jiān)控文件改變
–watchDirectory: 監(jiān)控頂級(jí)目錄
–watchIgnore: 通過(guò)模式匹配忽略監(jiān)控
-h, –help: 命令行幫助信息


四、forever服務(wù)器管理

創(chuàng)建一個(gè)web項(xiàng)目(express3+ejs),使用forever管理服務(wù)器。

安裝express3

復(fù)制代碼 代碼如下:

~ D:\workspace\javascript>express -e nodejs-forever
~ D:\workspace\javascript>cd nodejs-forever && npm install

通過(guò)forever啟動(dòng)應(yīng)用
復(fù)制代碼 代碼如下:

~ D:\workspace\javascript\nodejs-forever>forever start app.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app.js

打開(kāi)瀏覽器: http://localhost:3000,可以看到web界面

在win下面查看forever狀態(tài)

復(fù)制代碼 代碼如下:

~ D:\workspace\javascript\nodejs-forever>forever list
info:    No forever processes running

~ D:\workspace\javascript\nodejs-forever>forever stop app.js
error:   Forever cannot find process with index: app.js


我們發(fā)現(xiàn)forever的程序,工作不對(duì)了??!程序明明是運(yùn)行狀態(tài),通過(guò)list確看不到。接下來(lái),切換成Linux Ubuntu繼續(xù)測(cè)試。

五、forever在Ubuntu進(jìn)行服務(wù)器管理

Linux的系統(tǒng)環(huán)境

Linux: Ubuntu 12.04.2 64bit Server
Node: v0.11.2
Npm: 1.2.21
初始化項(xiàng)目:安裝命令不解釋了

復(fù)制代碼 代碼如下:

~ cd /home/conan/nodejs
~ express -e nodejs-forever
~ cd nodejs-forever && npm install
~ sudo npm install forever -g

啟動(dòng)forever
復(fù)制代碼 代碼如下:
~ forever start app.js
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app.js

查看node服務(wù)器狀態(tài)
復(fù)制代碼 代碼如下:
~ forever list
info:    Forever processes running
data:        uid  command             script forever pid   logfile                       uptime
data:    [0] L2tY /usr/local/bin/node app.js 18276   18279 /home/conan/.forever/L2tY.log 0:0:0:37.792

# 系統(tǒng)進(jìn)程
~ ps -aux|grep node
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
conan    18296  0.5  1.1 597696 23776 ?        Ssl  15:48   0:00 /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/monitor app.js
conan    18299  0.4  0.8 630340 18392 ?        Sl   15:48   0:00 /usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js

# 端口占用
~ netstat -nltp|grep node
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      18299/node

停止服務(wù)器

復(fù)制代碼 代碼如下:
~ forever stop app.js
info:    Forever stopped process:
data:        uid  command             script forever pid   logfile                       uptime
[0] L2tY /usr/local/bin/node app.js 18276   18279 /home/conan/.forever/L2tY.log 0:0:0:45.621

我們看到在Linux Ubuntu環(huán)境中是正常的。

六、模擬服務(wù)器宕機(jī)

兩種測(cè)試方案:

1. 用Linux命令,直接殺死node進(jìn)程
2. 在應(yīng)用中,模擬異常退出

1). 用Linux命令,直接殺死node進(jìn)程

復(fù)制代碼 代碼如下:

# 查看node進(jìn)程,PID=18299 
~ ps -aux|grep node

conan    18296  0.0  1.1 597696 23776 ?        Ssl  15:48   0:00 /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/monitor app.js
conan    18299  0.0  0.8 630340 18392 ?        Sl   15:48   0:00 /usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
conan    18315  0.0  0.0  13584   956 pts/5    R+   15:52   0:00 grep --color=auto node

# 殺死PID=19299
~ kill -9 18299

# 再看node進(jìn)程,node自動(dòng)重啟,新的PID=18324 
~ ps -aux|grep node

conan    18296  0.0  1.1 597696 23916 ?        Ssl  15:48   0:00 /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/monitor app.js
conan    18316  2.6  0.8 630340 18412 ?        Sl   15:52   0:00 /usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
conan    18324  0.0  0.0  13584   956 pts/5    R+   15:52   0:00 grep --color=auto node


我們看到看殺死node進(jìn)程,forever會(huì)幫助我們,重啟node。

殺死forever的monitor

復(fù)制代碼 代碼如下:

~ kill -9  18296
~ ps -aux|grep node

conan    18316  0.0  0.9 630340 18644 ?        Sl   15:52   0:00 /usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
conan    18333  0.0  0.0  13584   952 pts/5    S+   15:57   0:00 grep --color=auto node

# 再殺死node進(jìn)程
~ kill -9 18316
~ ps -aux|grep node

conan    18336  0.0  0.0  13584   956 pts/5    S+   15:58   0:00 grep --color=auto node


我們嘗試殺死了forever的monitor,monitor程序沒(méi)有自動(dòng)重啟,然后再殺死node進(jìn)程后,node也不會(huì)自動(dòng)重啟了。

2). 在應(yīng)用中,模擬異常退出
修改文件:app.js

復(fù)制代碼 代碼如下:

~ vi app.js

//..
http.createServer(app).listen(app.get('port'), function(){
  console.log(new Date());
  console.log('Express server listening on port ' + app.get('port'));
});

setTimeout(function(){
  console.log(new Date());
  throw new Error('App is error from inner!');
},10*1000);


通過(guò)node命令啟動(dòng)
復(fù)制代碼 代碼如下:
~ node app.js
Thu Sep 26 2013 16:08:44 GMT+0800 (CST)
Express server listening on port 3000
Thu Sep 26 2013 16:08:54 GMT+0800 (CST)

/home/conan/nodejs/nodejs-forever/app.js:41
  throw new Error('App is error from inner!');
        ^
Error: App is error from inner!
    at null._onTimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)


10秒后,由于內(nèi)部錯(cuò)誤, node進(jìn)程掛掉了。

通過(guò)forever命令啟動(dòng)

復(fù)制代碼 代碼如下:

~ mkdir logs
~ chmod 777 -R logs
~ forever -p . -l ./logs/access.log -e ./logs/error.log start app.js

# 檢查錯(cuò)誤日志
~ cat logs/access.log ls
Thu Sep 26 2013 16:15:02 GMT+0800 (CST)
Express server listening on port 3000
Thu Sep 26 2013 16:15:12 GMT+0800 (CST)

/home/conan/nodejs/nodejs-forever/app.js:41
  throw new Error('App is error from inner!');
        ^
Error: App is error from inner!
    at null._onTimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
error: Forever detected script exited with code: 8
error: Forever restarting script for 1 time
Thu Sep 26 2013 16:15:13 GMT+0800 (CST)
Express server listening on port 3000
Thu Sep 26 2013 16:15:23 GMT+0800 (CST)

/home/conan/nodejs/nodejs-forever/app.js:41
  throw new Error('App is error from inner!');
        ^
Error: App is error from inner!
    at null._onTimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
error: Forever detected script exited with code: 8
error: Forever restarting script for 2 time
Thu Sep 26 2013 16:15:23 GMT+0800 (CST)
Express server listening on port 3000
Thu Sep 26 2013 16:15:33 GMT+0800 (CST)

/home/conan/nodejs/nodejs-forever/app.js:41
  throw new Error('App is error from inner!');
        ^
Error: App is error from inner!
    at null._onTimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
error: Forever detected script exited with code: 8
error: Forever restarting script for 3 time
Thu Sep 26 2013 16:15:33 GMT+0800 (CST)
Express server listening on port 3000
Thu Sep 26 2013 16:15:43 GMT+0800 (CST)

/home/conan/nodejs/nodejs-forever/app.js:41
  throw new Error('App is error from inner!');
        ^
Error: App is error from inner!
    at null._onTimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
error: Forever detected script exited with code: 8
error: Forever restarting script for 4 time


我們發(fā)現(xiàn)每10秒種,node內(nèi)部掛掉,然后再被forever重啟!!

通過(guò)list我們手動(dòng)刷新幾次也可以看到pid是變的。

復(fù)制代碼 代碼如下:

~ forever list
info:    Forever processes running
data:        uid  command             script forever pid   logfile         uptime
data:    [0] SmtT /usr/local/bin/node app.js 18444   18579 logs/access.log 0:0:0:7.211

~ forever list
info:    Forever processes running
data:        uid  command             script forever pid   logfile         uptime
data:    [0] SmtT /usr/local/bin/node app.js 18444   18579 logs/access.log 0:0:0:8.921

~ forever list
info:    Forever processes running
data:        uid  command             script forever pid   logfile         uptime
data:    [0] SmtT /usr/local/bin/node app.js 18444   18604 logs/access.log 0:0:0:0.177

~ forever list
info:    Forever processes running
data:        uid  command             script forever pid   logfile         uptime
data:    [0] SmtT /usr/local/bin/node app.js 18444   18604 logs/access.log 0:0:0:2.206


這樣forever就幫助我們完成了,幾項(xiàng)比較重要服務(wù)器管理功能:“啟動(dòng)/停止命令簡(jiǎn)單”,“支持熱部署”,“宕機(jī)重啟”,“監(jiān)控界面和日志”。

比起upstart管理,省略了配置腳本的步驟(/etc/init/nodejs-xx.conf)。其他的功能,還要更近一步的使用才知道。

七、開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的啟動(dòng)配置

開(kāi)發(fā)環(huán)境

復(fù)制代碼 代碼如下:

~ cd /home/conan/nodejs/nodejs-forever/
~ forever -p . -l ./logs/access.log -e ./logs/error.log -a -w start app.js

生產(chǎn)環(huán)境
復(fù)制代碼 代碼如下:
~ export LOG=/var/log/nodejs/project
~ export PID=/var/log/nodejs/project/forever.pid
~ export APP_PATH=/home/conan/nodejs/nodejs-forever
~ export APP=$APP_PATH/app.js

~ forever -p $APP_PATH -l $LOG/access.log -e $LOG/error.log -o $LOG/out.log -a --pidFile $PID start $APP


相關(guān)文章

  • NodeJS使用遞歸算法和遍歷算法來(lái)遍歷目錄的方法

    NodeJS使用遞歸算法和遍歷算法來(lái)遍歷目錄的方法

    遍歷目錄是操作文件時(shí)的一個(gè)常見(jiàn)需求,比如寫(xiě)一個(gè)程序,需要找到并處理指定目錄下的所有JS文件時(shí),就需要遍歷整個(gè)目錄,NodeJS遍歷目錄可以使用遞歸算法、遍歷算法,遍歷算法又分為同步遍歷、異步遍歷兩種,本文介紹NodeJS使用遞歸算法和遍歷算法來(lái)遍歷目錄的方法
    2023-11-11
  • Node.js實(shí)現(xiàn)在目錄中查找某個(gè)字符串及所在文件

    Node.js實(shí)現(xiàn)在目錄中查找某個(gè)字符串及所在文件

    這篇文章主要介紹了Node.js實(shí)現(xiàn)在目錄中查找某個(gè)字符串及所在文件,文中代碼簡(jiǎn)潔,而且速度相當(dāng)?shù)目?需要的朋友可以參考下
    2014-09-09
  • Node.js常用三大模塊之path模塊

    Node.js常用三大模塊之path模塊

    在node.js中常用的三大模塊中還有一個(gè)是path模塊,主要是為了便利用戶處理路徑問(wèn)題,如果我們?cè)谝胛募臅r(shí)候經(jīng)常會(huì)受到../和./的干擾,那么這個(gè)path模塊將會(huì)很好的幫助你
    2022-09-09
  • node.js中的fs.truncate方法使用說(shuō)明

    node.js中的fs.truncate方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.truncate方法使用說(shuō)明,本文介紹了fs.truncate的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node連接mysql數(shù)據(jù)庫(kù)方法介紹

    Node連接mysql數(shù)據(jù)庫(kù)方法介紹

    本篇文章主要介紹了Node連接mysql數(shù)據(jù)庫(kù)方法介紹。詳細(xì)的介紹了怎樣連接和操作數(shù)據(jù)庫(kù),并舉例說(shuō)明,有興趣的可以了解一下。
    2017-02-02
  • 使用Node.js給圖片加水印的方法

    使用Node.js給圖片加水印的方法

    使用Node.js給圖片加水印,首先要確保本地安裝了node環(huán)境。然后,我們進(jìn)行圖像編輯操作需要用到一個(gè)Node.js的庫(kù):images。具體詳情大家可以通過(guò)本文了解下
    2016-11-11
  • NodeJs操作MongoDB教程之分頁(yè)功能以及常見(jiàn)問(wèn)題

    NodeJs操作MongoDB教程之分頁(yè)功能以及常見(jiàn)問(wèn)題

    這篇文章主要給大家介紹了關(guān)于NodeJs操作MongoDB教程之分頁(yè)功能以及常見(jiàn)問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用NodeJs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • npm?ERR!Cannot?read?properties?of?null(reading?'pickAlgorithm')報(bào)錯(cuò)問(wèn)題解決

    npm?ERR!Cannot?read?properties?of?null(reading?'p

    這篇文章主要給大家介紹了關(guān)于npm?ERR!Cannot?read?properties?of?null(reading?'pickAlgorithm')報(bào)錯(cuò)問(wèn)題的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • NPM命令運(yùn)行報(bào)錯(cuò):npm?v10.2.4?is?known?not?to?run?on?Node.js?v14.21.1解決辦法

    NPM命令運(yùn)行報(bào)錯(cuò):npm?v10.2.4?is?known?not?to?run?on?Node.js

    這篇文章主要給大家介紹了關(guān)于NPM命令運(yùn)行報(bào)錯(cuò):npm?v10.2.4?is?known?not?to?run?on?Node.js?v14.21.1的解決辦法,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • nodejs中的異步編程知識(shí)點(diǎn)詳解

    nodejs中的異步編程知識(shí)點(diǎn)詳解

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于nodejs中的異步編程知識(shí)點(diǎn)詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01

最新評(píng)論