nodejs pm2教程

一登钥、簡介

pm2是一個帶有負(fù)載均衡功能的應(yīng)用進程管理器铆惑,類似有Supervisor掏颊,forever。

二瘦癌、安裝

Linux Binaries下載地址:https://nodejs.org/dist

cdoneinstack/src

wget https://nodejs.org/dist/v4.2.4/node-v4.2.4-linux-x64.tar.gz

tar?xzf?node-v4.2.4-linux-x64.tar.gz

cp?node-v4.2.4-linux-x64/bin/node?/usr/local/bin/

cp?-R?node-v4.2.4-linux-x64/lib/node_modules?/usr/local/lib/

ln?-s?/usr/local/lib/node_modules/npm/bin/npm-cli.js?/usr/local/bin/npm

npm?install?pm2@latest?-g #安裝最新版本pm2模塊

PS: 如果你的主機無法連接公網(wǎng)眼耀,先找到能連公網(wǎng)的主機安裝上面的方法安裝pm2,然后拷貝到你要安裝的主機佩憾∠埃拷貝如下目錄:

/usr/local/bin/node

/usr/local/lib/node_modules

再創(chuàng)建相關(guān)軟連接

三、PM2常用命令

假設(shè)你現(xiàn)在已經(jīng)寫好了一個app.js的文件妄帘,需要啟動楞黄,你可以使用pm2進行管理

1. 啟動

# pm2?start?app.js

# pm2?start?app.js?--name?my-api#my-api為PM2進程名稱

# pm2?start?app.js?-i?0#根據(jù)CPU核數(shù)啟動進程個數(shù)

# pm2?start?app.js?--watch#實時監(jiān)控app.js的方式啟動,當(dāng)app.js文件有變動時抡驼,pm2會自動reload

2. 查看進程

# pm2list

# pm2?show?0?或者#?pm2?info?0??#查看進程詳細(xì)信息鬼廓,0為PM2進程id

3. 監(jiān)控

#?pm2?monit

4. 停止

#?pm2?stop?all??#停止PM2列表中所有的進程

#?pm2?stop?0????#停止PM2列表中進程為0的進程

5. 重載

#?pm2?reload?all????#重載PM2列表中所有的進程

#?pm2?reload?0?????#重載PM2列表中進程為0的進程

6. 重啟

#?pm2?restart?all?????#重啟PM2列表中所有的進程

#?pm2?restart?0??????#重啟PM2列表中進程為0的進程

7. 刪除PM2進程

#?pm2?delete?0?????#刪除PM2列表中進程為0的進程

#?pm2?delete?all???#刪除PM2列表中所有的進程

8. 日志操作

#?pm2?logs?[--raw]???#Display?all?processes?logs?in?streaming

#?pm2?flush??????????????#Empty?all?log?file

#?pm2?reloadLogs????#Reload?all?logs

9. 升級PM2

#?npm?install?pm2@lastest?-g???#安裝最新的PM2版本

#?pm2?updatePM2????????????????????#升級pm2

10. 更多命令參數(shù)請查看幫助

#?pm2?--help

四、PM2目錄結(jié)構(gòu)

默認(rèn)的目錄是:當(dāng)前用于的家目錄下的.pm2目錄(此目錄可以自定義致盟,請參考:五碎税、自定義啟動文件),詳細(xì)信息如下:

$HOME/.pm2#will?contain?all?PM2?related?files

$HOME/.pm2/logs#will?contain?all?applications?logs

$HOME/.pm2/pids#will?contain?all?applications?pids

$HOME/.pm2/pm2.log#PM2?logs

$HOME/.pm2/pm2.pid#PM2?pid

$HOME/.pm2/rpc.sock#Socket?file?for?remote?commands

$HOME/.pm2/pub.sock#Socket?file?for?publishable?events

$HOME/.pm2/conf.js#PM2?Configuration

五馏锡、自定義啟動文件

創(chuàng)建一個test.json的示例文件雷蹂,格式如下:

{

"apps":

{

"name":?"test",

"cwd":?"/data/wwwroot/nodejs",

"script":?"./test.sh",

"exec_interpreter":?"bash",

"min_uptime":?"60s",

"max_restarts":?30,

"exec_mode"?:?"cluster_mode",

"error_file"?:?"./test-err.log",

"out_file":?"./test-out.log",

"pid_file":?"./test.pid"

"watch":?false

}

}

說明:

apps:json結(jié)構(gòu),apps是一個數(shù)組杯道,每一個數(shù)組成員就是對應(yīng)一個pm2中運行的應(yīng)用

name:應(yīng)用程序的名稱

cwd:應(yīng)用程序所在的目錄

script:應(yīng)用程序的腳本路徑

exec_interpreter:應(yīng)用程序的腳本類型匪煌,這里使用的shell,默認(rèn)是nodejs

min_uptime:最小運行時間党巾,這里設(shè)置的是60s即如果應(yīng)用程序在60s內(nèi)退出萎庭,pm2會認(rèn)為程序異常退出,此時觸發(fā)重啟max_restarts設(shè)置數(shù)量

max_restarts:設(shè)置應(yīng)用程序異常退出重啟的次數(shù)齿拂,默認(rèn)15次(從0開始計數(shù))

exec_mode:應(yīng)用程序啟動模式驳规,這里設(shè)置的是cluster_mode(集群),默認(rèn)是fork

error_file:自定義應(yīng)用程序的錯誤日志文件

out_file:自定義應(yīng)用程序日志文件

pid_file:自定義應(yīng)用程序的pid文件

watch:是否啟用監(jiān)控模式署海,默認(rèn)是false吗购。如果設(shè)置成true,當(dāng)應(yīng)用程序變動時叹侄,pm2會自動重載巩搏。這里也可以設(shè)置你要監(jiān)控的文件昨登。

詳細(xì)參數(shù)列表:見附件八

六趾代、實例

已上面的test.json為例

#?cat?>?/data/wwwroot/nodejs/test.sh?<<?EOF

#!/bin/bash

while:

do

echo?"Test"?>>?1.log

sleep?5

done

EOF

#?chmod?+x?test.sh??????#添加執(zhí)行權(quán)限

#?pm2?start?test.json????#啟動,如下圖:

#?pm2?list????#查看pm2進程丰辣,如下圖:

七撒强、備注

其他可參數(shù)見官網(wǎng):http://pm2.keymetrics.io

八禽捆、附件

FieldTypeExampleDescription

namestring"myAPI"name your app will have in PM2

scriptstring"bin/app.js"path of your app

argslist["--enable-logs", "-n", "15"]arguments given to your app when it is launched

node_argslist["--harmony", "--max-stack-size=1024"]arguments given to node when it is launched

cwdstring"/var/www/app/prod"the directory from which your app will be launched

exec_modestring"cluster""fork" mode is used by default, "cluster" mode can be configured with instances field

instancesnumber4number of instances for your clustered app, 0 means as much instances as you have CPU cores. a negative value means CPU cores - value (e.g -1 on a 4 cores machine will spawn 3 instances)

exec_interpreterstring"node"defaults to "node". can be "python", "ruby", "bash" or whatever interpreter you wish to use. "none" will execute your app as a binary executable

log_date_formatstring"YYYY-MM-DD HH:mm Z"format in which timestamps will be displayed in the logs

error_filestring"/var/log/node-app/node-app.stderr.log"path to the specified error log file. PM2 generates one by default if not specified and you can find it by typing pm2 desc

out_filestring"/var/log/node-app/node-app.stdout.log"path to the specified output log file. PM2 generates one by default if not specified and you can find it by typing pm2 desc

pid_filestring"pids/node-geo-api.pid"path to the specified pid file. PM2 generates one by default if not specified and you can find it by typing pm2 desc

merge_logsbooleanfalsedefaults to false. if true, it will merge logs from all instances of the same app into the same file

cron_restartstring"1 0 * * *"a cron pattern to restart your app. only works in "cluster" mode for now. soon to be avaible in "fork" mode as well

watchbooleantrueenables the watch feature, defaults to "false". if true, it will restart your app everytime a file change is detected on the folder or subfolder of your app.

ignore_watchlist["[\/\\]\./", "node_modules"]list of regex to ignore some file or folder names by the watch feature

min_uptimenumber1000min uptime of the app to be considered started (i.e. if the app crashes in this time frame, the app will only be restarted the number set in max_restarts (default 15), after that it's errored)

max_restartsnumber10number of consecutive unstable restarts (less than 1sec interval or custom time via min_uptime) before your app is considered errored and stop being

max_memory_restartstring"150M"your app will be restarted by PM2 if it exceeds the amount of memory specified. human-friendly format : it can be "10M", "100K", "2G" and so on...

envobject{"NODE_ENV": "production", "ID": "42"}env variables which will appear in your app

autorestartbooleanfalsetrue by default. if false, PM2 will not restart your app if it crashes or ends peacefully

vizionbooleanfalsetrue by default. if false, PM2 will start without vizion features (versioning control metadatas)

post_updatelist["npm install", "echo launching the app"]a list of commands which will be executed after you perform a Pull/Upgrade operation from Keymetrics dashboard

forcebooleantruedefaults to false. if true, you can start the same script several times which is usually not allowed by PM2

next_gen_jsbooleantruedefaults to false. if true, PM2 will launch your app using embedded BabelJS features which means you can run ES6/ES7 javascript code

restart_delaynumber4000time to wait before restarting a crashed app (in milliseconds). defaults to 0.


原文地址:https://blog.linuxeye.cn/435.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市飘哨,隨后出現(xiàn)的幾起案子胚想,更是在濱河造成了極大的恐慌,老刑警劉巖芽隆,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浊服,死亡現(xiàn)場離奇詭異,居然都是意外死亡胚吁,警方通過查閱死者的電腦和手機牙躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腕扶,“玉大人孽拷,你說我怎么就攤上這事“氡В” “怎么了脓恕?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窿侈。 經(jīng)常有香客問我炼幔,道長,這世上最難降的妖魔是什么史简? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任江掩,我火速辦了婚禮,結(jié)果婚禮上乘瓤,老公的妹妹穿的比我還像新娘环形。我一直安慰自己,他們只是感情好衙傀,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布抬吟。 她就那樣靜靜地躺著,像睡著了一般统抬。 火紅的嫁衣襯著肌膚如雪火本。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天聪建,我揣著相機與錄音钙畔,去河邊找鬼。 笑死金麸,一個胖子當(dāng)著我的面吹牛擎析,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播挥下,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼揍魂,長吁一口氣:“原來是場噩夢啊……” “哼桨醋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起现斋,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤喜最,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后庄蹋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞬内,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年限书,在試婚紗的時候發(fā)現(xiàn)自己被綠了遂鹊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔗包,死狀恐怖秉扑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情调限,我是刑警寧澤舟陆,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站耻矮,受9級特大地震影響秦躯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裆装,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一踱承、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哨免,春花似錦茎活、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至采桃,卻和暖如春懒熙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背普办。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工工扎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衔蹲。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓肢娘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔬浙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的閱讀 13,433評論 5 6
  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa閱讀 8,851評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)贞远,斷路器畴博,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,724評論 0 33
  • 這時他打來電話“你這次出去散心回來蓝仲,我們把婚離了吧……” “好啊俱病,好啊,你準(zhǔn)備好了袱结,我分分鐘亮隙,或者說秒秒鐘簽字……...
    拈花一笑225678閱讀 191評論 0 0