用pm2管理一个或多个node.js应用

0.目标

《http-proxy反向代理以调度服务器各app》 中,我们谈到了域名解析过来后应用调度问题;除此之外,在部署了多个node.js应用后,我们还会面临多个应用管理不方便、需要来回切换命令行的窘境。

为了解决这个问题,我决定使用pm2来管理所有node.js应用。


1.安装

安装pm2很简单,执行下面指令即可:

npm install pm2@latest -g

注意,-g 意味着这是一个全局的,和 supervisorexpress 一样,在安装完毕后,可以在全局使用该指令。另外,这里的 @latest 可以不写。


2.用pm2启动一个应用

需要明白的是,pm2是一个全局的指令,我们可以在任何目录中使用它。

举个例子,我有三个应用,分别放在C盘的不同文件夹里:

C:\node1
C:\node2
C:\node3

那么,我们就可以分别进入这两个目录,并使用pm2来启动这两个应用。注意到,我们启动一个node应用,一般是

node app.js
// 或
supervisor app.js

那么使用pm2,则分别进入这三个应用中,执行下面命令:

pm2 start app.js

// 在Express中,会这么做
pm2 start bin/www

当然,作为追求高效便捷的程序员,我们一定会想有没有更快捷的方法,能不能写个依赖文件直接自动配置。答案是,当然有!不过,这部分内容已经属于更高级的内容,我不打算在这篇文章中写出。可以参考这里: Process File


3.pm2管理应用

下面给出了一些主要的命令:

# Fork mode
$ pm2 start app.js --name my-api # Name process


# Cluster mode
$ pm2 start app.js -i 0        # Will start maximum processes with LB depending on available CPUs
$ pm2 start app.js -i max      # Same as above, but deprecated yet.


# Listing
$ pm2 list               # Display all processes status
$ pm2 jlist              # Print process list in raw JSON
$ pm2 prettylist         # Print process list in beautified JSON

$ pm2 describe 0         # Display all informations about a specific process

$ pm2 monit              # Monitor all processes


# Logs
$ pm2 logs [--raw]       # Display all processes logs in streaming
$ pm2 flush              # Empty all log file
$ pm2 reloadLogs         # Reload all logs


# Actions
$ pm2 stop all           # Stop all processes
$ pm2 restart all        # Restart all processes

$ pm2 reload all         # Will 0s downtime reload (for NETWORKED apps)
$ pm2 gracefulReload all # Send exit message then reload (for networked apps)

$ pm2 stop 0             # Stop specific process id
$ pm2 restart 0          # Restart specific process id

$ pm2 delete 0           # Will remove process from pm2 list
$ pm2 delete all         # Will remove all processes from pm2 list


# Misc
$ pm2 reset <process>    # Reset meta data (restarted time...)
$ pm2 updatePM2          # Update in memory pm2
$ pm2 ping               # Ensure pm2 daemon has been launched
$ pm2 sendSignal SIGUSR2 my-app # Send system signal to script
$ pm2 start app.js --no-daemon
$ pm2 start app.js --no-vizion
$ pm2 start app.js --no-autorestart

* 资料来源: http://pm2.keymetrics.io/docs/usage/quick-start/


3.1 用 pm2 list 来查看正在运行的应用名称和id

先说说用pm2启动了一个应用后,我们能做什么。

使用 pm2 list,我们可以看到所有已经启动的应用:

启动的应用
启动的应用

可以看到,我一共启动了两个应用,其App name分别是onelib_node和www,其id分别为1和2。

有了这两个参数,我们就可以分别对它们进行进一步的操作了。


3.2 用 pm2 logs 来查看应用的记录

使用这个命令后,我们可以查看所有记录:

记录
记录

我们还可以用 pm2 flush来清空所有的记录。


3.3 用 pm2 describe id 来查看制定应用的状态

指令中的 id 即我们用pm2 list命令看到的应用id,通过id来指定需要查看的应用。

查看应用状态
查看应用状态

3.4 关闭、重启应用

要关闭所有的应用,可以:

pm2 stop all

要重启所有的应用,可以:

pm2 restart all

如果我们想要关闭某一个应用,只需要指定其id即可:

pm2 stop id

同样地,如果我们想要重启某一个应用,只需要指定其id即可:

pm2 restart id

3.5 删除应用

我们在关闭一个应用后,使用 pm2 list 仍能查找到它,显示 stopped 状态。有时候,我们要删除某个应用,并且不再希望看到它。这种情况,我们可以使用删除命令:

pm2 delete id

如果要删除所有应用,则:

pm2 delete all

4. 用 watch模式启动应用

在之前的文章中,我介绍了supervisor在开发过程中的作用:我们在修改了代码后,不需要重启服务就能自动更新。

那么,作为更加强大的pm2,是否也能做得呢?答案是当然可以!

这需要我们在启动服务的时候,在后面加上 --watch 来启动监控代码是否变化。通过这种方式启动的应用,在其文件夹内的文件有更改时,会自动更新。

watch模式
watch模式

从上图可以看到,watching参数已经置为 enabled 了(原来是灰色的disabled

需要特别注意的是:一旦使用 watch 模式启动服务,就不能再通过 pm2 stop id 来关闭它了。相应的,我们也要加上 --watch 参数:

pm2 stop --watch id

更多资料,请参考:http://pm2.keymetrics.io/docs/usage/watch-and-restart/


5.监控服务

要查看开启的应用的运行状态,可以使用这个命令:

pm2 monit

由于我实在没法模拟得这么形象,只好从 PM2 盗个图来了:

示例
示例

6.未完待续

pm2的功能远不止这些,从它的官网上看,还有很多的高级功能等我们去使用。在后续的工作中,如果有更好的使用场景和方法,我仍然会在这里作出更新,以分享给大家。

最后,推荐大家多看看pm2的官网,这里有更详细的说明: http://pm2.keymetrics.io/


原创文章,未经许可,请勿转载
作者:Mike的读书季
日期:2016.11.12
QQ:1139904786
网站:http://www.onelib.biz

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,395评论 25 707
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,724评论 6 342
  • 上一篇大概介绍了JWT的用法,实现了一个简单的登录注册以及邮箱验证。而这一篇呢就负责把我们的项目部署到自己的服务器...
    sidiWang阅读 10,350评论 2 48
  • 转换开始了。这是二十四小时周期的分隔时刻,整个世界开始翻转,钢筋砖块合拢的声音连成一片,像出了故障的流水线。高楼收...
    _加油_阅读 125评论 0 0