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模式

从上图可以看到,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 盗个图来了:

用pm2管理一个或多个node.js应用相关推荐

  1. 英巴卡迪诺_什么是迪诺? 一个更好的Node.js

    英巴卡迪诺 如果您喜欢Node.js但不喜欢它的包管理器npm ,或者想要一个比Node.js更安全JavaScript运行时环境,则可能会发现感兴趣的新开源项目Deno (单词Deno是Node的字 ...

  2. 使用express搭建第一个Web应用【Node.js初学】

    来源:http://jingyan.baidu.com/article/bad08e1ee501e009c8512106.html express是一个开源的node.js项目框架,初学者使用expr ...

  3. 创建一个提供数据 API 的 Node.js 网站

    创建站点目录 首先,创建一个文件夹用来保存你的站点文件,使用 mkdir 就可以了 PS C:\> mkdir mysite 然后,进入到这个文件夹进行下一步的操作. 创建包说明 使用记事本或者 ...

  4. express如何返回一个html文档,node.js express 返回一个静态页面

    首先我们要有一个静态页面 .html 文件. 然后,我们初始化一个express 项目. 首先新建一个目录,进入它,如果没有下载express的话,使用命名下载npm install express ...

  5. 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用

    winston 被设计为一个简单且通用的日志库,支持多种传输. 传输本质上是日志的存储设备. 每个 winston 记录器都可以在不同级别配置多个存储渠道.例如,人们可能希望将错误日志存储在持久的远程 ...

  6. (18) Node.js npm包管理工具

    一.npm概述 npm (Node Package Manager)是 Node.js 的包管理工具. 什么是包?包就是一坨代码,就是 Node.js 的第三方模块. 例如:JQuery模块,Boot ...

  7. 90%的人都不知道的Node.js 依赖关系管理(上)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 引言 Node.js中的一个重要概念是依赖关系管理.本文就将带大家了解依赖管理的各种模式以及Node.js如 ...

  8. 一个基于Node.js的本地快速测试服务器

    local-web-test 一个本地的基于node.js的测试服务器 支持快速的启动web容器服务 支持快速的发送get,post请求,并记录在/log文件夹下,并在控制台输出 支持一个函数完成co ...

  9. linux 页面内容输出,Node.js 一个简单的页面输出

    最近决定重拾node.js,用它来做一个合并JS文件的东西.由于忘得差不多了,先看能不能输出一个页面来再说.以下是我的一些笔记,省得以后又忘净光-- 安装过程就不说了.如果成功是能使用node的命令. ...

最新文章

  1. xss实例-输出在script/script之间的情况
  2. mysql查询死锁的次数_一次神奇的MySQL死锁排查记录
  3. 更新 绑定数据_Blazor 修仙之旅 组件与数据绑定
  4. java 8 update 11_从Java 8升级到Java 11应该注意的问题
  5. Mysql查询语句练习题
  6. 抓包工具 tcpdump tshark
  7. 设计一个方法输入字符串,字节数,输出截取的字符串
  8. 应用程序中主键ID生成与UUID
  9. R语言怎么导入表格画图_立创EDA画图不求人18 | 视频教程 | 原理图横向纵向切换...
  10. 千兆路由器怎么设置网速最快_千兆路由器体验:速度简直太快了
  11. Dos窗口的常见打开方式和常见命令
  12. hadoop3新特性
  13. java的if 、if else、while、do while、switch、for执行语句
  14. 炒白菜怎么做(保姆级教程 爸妈吃了都说好)
  15. 96-Java的打印流、打印流重定向、补充知识:Properties、commons-io框架
  16. 80端口跟8080端口有什么区别
  17. Window线程安全与线程控制函数
  18. Python 某电子产品销售数据分析报告及RFM模型(一)
  19. 英语四六级作文句型收集
  20. 计算机声音打不开怎么办,电脑声音打不开怎么办

热门文章

  1. Rapidshare-video-tutorial
  2. 21、基于51单片机无线防丢器设计寻物跟踪儿童防丢系统设计
  3. 女人脱裤子的水平决定婚姻的质量[转]
  4. ChatGPT论文写作指导01——教育技术学的研究对象如何增强在线教学交互?
  5. 路由器重温——PPPoE配置管理-1
  6. 一款有意思的flash音乐游戏
  7. Thinkvantage system update删除更新储存文件解决办法...
  8. spark java udf_在 Apache Spark 中使用 UDF
  9. 虚拟机双网卡设置(外网+内网)
  10. Jmeter-服务器监控