pm2进程管理器

pm2是node的进程管理器,它的最大好处是能管理多个node服务,系统重启后或文件修改后,都能重启node服务。

先全局安装pm2插件。

npm install -g pm2   //cnpm install -g pm2

生成配置文件,您可以键入以下命令:

pm2 init //会生成ecosystem.config.js文件,可更改名称为server.config.js
pm2 start server.config.js //启动配置文件
//配置监听文件与忽略监听文件如下:
//pm2 start ./src/index.js --watch --ignore-watch='test node_modules' --name echarts-export-server

注意:请确保它以.config.js结尾,以便 PM2 能够将其识别为配置文件。

pm2默认解析器是nodex.exe,所以要想运行某个项目的npm命令,只能用node模块child_process或安装 node-cmd依赖。然后通过执行js,从而达到运行npm命令,操作如下:

//ps: Created by npm, please don't edit manually.
//方法一:使用Node模块child_process
//在项目根路径下添加cpm.js文件,其内容如下:
//require('child_process').exec('npm start', {windowsHide: true});
var exec = require('child_process').exec;
exec('npm start', {windowsHide: true});

//窗口命令
pm2 start cpm.js

====================================================================================

//方法二:使用第三方依赖node-cmd
//窗口命令
npm install node-cmd --save  //在项目下,安装node-cmd

//在项目根路径下添加cpm.js文件,其内容如下:
//require('node-cmd').run('npm start');
var cmd=require('node-cmd');
cmd.run('npm start');

//窗口命令
pm2 start cpm.js

如果某个服务status(状态)stopped(停用),可用pm2 log 0(数字零是id)查看报错内容。
server.config.js文件,运行命令【pm2 start server.config.js】启动配置文件:

module.exports = {
  apps: [{
    "name": "server1",//启动服务的名称
    "script": "./npm.js",//默认是启动.js文件 前端启动
    "cwd": "F:/bona/企业能源监测前端_管理系统_Energy-Monitor-UI", //绝对路径: windows文件目录
    "max_memory_restart": "3G", // 最大内存重启
    "autorestart": true, // 自动重启
     "watch":true,// 监控变化的目录,一旦变化,自动重启
    "env": { // 自己去配置一些环境变量
      "NODE_ENV": "development"
    },
    "ignore_watch": [ // 从监控目录中排除
        "node_modules",
        "logs"
    ],
  },{
    "name": "server2",//启动服务的名称
    "script": "./index.js", //默认是启动.js文件 后端启动
    "cwd": "F:/bona/echarts-export-server(node生成echarts图片)/src", //绝对路径: windows文件目录
    "max_memory_restart": "1G", // 最大内存重启
    "autorestart": true, // 自动重启
    "watch":true,// 监控变化的目录,一旦变化,自动重启
    "env": { // 自己去配置一些环境变量
      "NODE_ENV": "production"
    },
    "ignore_watch": [ // 从监控目录中排除
        "node_modules",
        "logs"
    ],
  }]
};

更多配置说明:

{
    "apps": [
        {
            "name": "server",
            "script": "production.js", //默认是启动.js文件 后端启动
            "args" : "aaa bbb 666",//参数:通过process.argv获取
            "cwd": "/home/www/supermarket-system", //绝对路径: linux文件目录
            "exec_mode": "fork", // fork:分叉模式(默)   cluster:集群模式
            "max_memory_restart": "1G", //默认150M, 最大内存重启
            "autorestart": true, // 自动重启
            "interpreter":"/usr/bin/python",//解释器:绝对路径,默认是node.exe
            "env": {}, // 自己去配置一些环境变量
            "watch": [ //默认值是true,也可设置为数组。 监控变化的目录,一旦变化,自动重启
                "bin",
                "routers"
            ],
            "ignore_watch": [ // 从监控目录中排除
                "node_modules",
                "logs",
                "public"
            ],
            "watch_options": {
                "followSymlinks": false
            },
            "error_file": "./logs/app-err.log", // 错误日志路径
            "out_file": "./logs/app-out.log" // 普通日志路径
        }
    ]
}

pm2部署node频繁重启问题排查, 通过pm2 list命令观察状态时发现重启次数异常(555次)。

id name namespace version mode pid uptime status cpu mem user watching
0 server default N/A fork 18888 44s 555 online 1% 28.6mb Adm… enabled
  1. 程序出现异常,未捕获,导致线程退出。
  2. Promise状态为rejected未捕获异常,导致线程退出。
  3. 发送退出信号,退出线程。 调用process.ext()退出。
  4. 纯js(没启动服务与端口的js),也会一直重启。

node index.js arg1 arg2
pm2 start index.js -- arg1 arg2
上面两个等价,获取参数的方法【process.argv】
返回一个数组如下:

[
    '/usr/bin/node', 
    '/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js', 
    'arg1', 
    'arg2'
]
process.env.NODE_ENV = "production";//生产环境
process.env.NODE_ENV = "development";//开发环境
process.env.NODE_ENV = "test";//测试环境

清除PM2日志,只需要使用以下命令即可: pm2 flush 这条命令将会清除PM2志文件夹中所有的日志文件,从而释放磁盘空间。
注意:配置文件发生更改,如没能生效,请pm2 delete all,再执行启动命令。

参考链接:

https://pm2.keymetrics.io/docs/usage/application-declaration/#generate-configuration (pm2官网)

https://blog.csdn.net/z591102/article/details/124624831 (pm2常用命令汇总)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容