本文介绍pm2的基本使用方法。主要针对pm2的命令,有关配置 文件ecosystem.config.js的细节,后文将进行讲解。

重要教训

在生产环境中,谨慎使用pm2 killpm2 restart all这样全局性的操作。
笔者就误操作过一次,将生产服务器上所有pm2实例都干掉,还好有同事帮助,在短时间内恢复了,甲方公司那边没感知。

生成ecosystem.config.js文件

在工程目录输入:

pm2 ecosystem

启动

pm2 start(有ecosystem.config.js情况下)
pm2 start app.js(指定某个js文件)

停止

pm2 stop <PID>

注:stop只是停止了,但不是真正的删除。使用kill,才是真正的“删除”。

删除所有pm2管理的实例:

pm2 kill

pm2的管理是全局的,不管在哪个目录,执行kill操作都会删除所有的实例!,在生产环境中务必谨慎!
注:目前笔者还没有找到能“删除”某一个实例的命令。

重启

pm2 startOrGracefulReload ecosystem.config.js
pm2 startOrRestart ecosystem.config.js
pm2 reload ecosystem.config.js
pm2 reload all // 重载所有进程
pm2 reload foobar // 只重载foobar实例
pm2 restart ecosystem.config.js
pm2 restart all

上面的方式,不管是startOrGracefulReload、restart还是reload,是不会更新环境变量的,就是说,即便修改了ecosystem.config.js文件,也没有效果。pm2提供了--update-env选项,可达到目的。

更新ecosystem.config.js文件的环境变量:

pm2 reload ecosystem.config.js --update-env

注意,restart会重新启动进程,如果是socket服务,会提示端口被占用。 ——未经多次验证。

常用用法

启动时,使用生产环境:

pm2 start --env production

重启时,使用生产环境:

pm2 restart --env production

pm2自动运行

如果想让机器重启后,pm2能自动启动,则以root权限执行:

pm2 startup [平台名称]
示例:
pm2 startup
或
pm2 startup ubuntu

即可。平台名称支持的有:

ubuntu, centos, redhat, gentoo, systemd, darwin, amazon.

实际测试时发现,不输出平台名称,则pm2会自己去搜索并确定使用哪一个平台。

如果要取消开机自动运行,执行:

pm2 unstartup
或
pm2 unstartup ubuntu

要保存pm2已经管理的实例,执行:

pm2 save

注:没看到了取消保存的命令,测试发现,取消开机自动运行pm2,就会自动删除保存的实例。

下面给出一些日志信息。  
开机自动运行:

pm2 startup
[sudo] password for latelee:
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/usr/local/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/latelee/.pm2
PIDFile=/home/latelee/.pm2/pm2.pidExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/usr/local/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill[Install]
WantedBy=multi-user.targetTarget path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink from /etc/systemd/system/multi-user.target.wants/pm2-root.service to /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save[PM2] Remove init script via:
$ pm2 unstartup systemd

保存实例:

# pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /home/latelee/.pm2/dump.pm2

取消开机自动运行:

pm2 unstartup
[PM2] Init System found: systemd
Removed symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service.Removed symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service.[PM2] Init file disabled.

出错及处理:

$ pm2 list
[PM2][ERROR] Permission denied, to give access to current user:
$ sudo chown latelee:latelee /home/latelee/.pm2/rpc.sock /home/latelee/.pm2/pub.sock

执行sudo chown latelee:latelee /home/latelee/.pm2/rpc.sock /home/latelee/.pm2/pub.sock即可。原因应该是系统自动执行时,会以root执行,权限就变化了。

集群模式

调整实例数量:

pm2 scale <实例名称> <数量>
pm2 scale app 4

参考资料

http://www.augustkleimo.com/how-to-run-nodejs-using-pm2-on-amazon-ec2-linux/
http://pm2.keymetrics.io/docs/usage/application-declaration/

李迟 2019.2.5 周二

nodejs实践录:pm2使用相关推荐

  1. nodejs实践录:pm2实验测试记录

    本文是测试在运行时更新ecosystem配置文件的记录. 源码 服务端 /* express简单示例 */ //const log = require('../lib/log.js'); const ...

  2. nodejs实践录:基于koa的简单web服务器

    背景: nodejs搭建web服务是一件十分简单的事情,支持的框架多,有关的库也多,不像嵌入式那般繁琐.本文提出一种利用koa搭建web服务的方案,适用简单的数据展示和信息查询,文后有源码地址,可直接 ...

  3. nodejs实践录:我的nodejs编码风格

    本文介绍笔者使用nodejs开发的环境,以及编码风格. 环境 笔者在linux.windows都安装了nodejs,还安装了pm2.在windows平台,使用cmd终端或git bash运行node或 ...

  4. nodejs实践录:windows 10系统nodejs环境搭建

    本文讲述windows 10 64bit系统中,nodejs环境的搭建. 安装 下载地址为:https://nodejs.org/zh-cn/download/, 下载安装包为node-v10.15. ...

  5. nodejs实践录:ubuntu 16.04系统nodejs环境搭建

    本文讲述ubuntu 16.04 64bit系统中,nodejs环境的搭建. 安装 此章节已失效 此章节已失效 更新源,命令如下: sudo apt-get update sudo apt-get i ...

  6. nodejs实践录:开篇

    笔者从事C开发很多年了,不太想跨语言开发,不过,因为工作的关系,需要使用nodejs进行后台开发.一来是工作,二来多了解一个新语言,总归是有好处. 经过一段时间加强训练,了解了nodejs一点皮毛,发 ...

  7. nodejs实践录:测试连接性及邮件通知

    本文给出一个与服务器测试连通性的示例,具备邮件通知功能,可以以此为基础添加需要的测试项. 代码功能如下: 测试程序与服务器连接,发送指定报文(由内部指定),服务端收到指定报文,回复testOK,客户端 ...

  8. nodejs实践录:使用curl测试post请求

    以前与后台交互的json接口,都是用postman工具来测试的,后来发现curl命令也可以发post或get请求.本文利用koa创建web服务器,对外提供了几个URL,然后用curl进行测试. 3.源 ...

  9. nodejs实践录:按行处理文件数据的示例

    背景: 有时候,我们需要对日志做事后分析,抽离出特定的数据进行处理.比如: 1.中间件模块发送json数据到后台,每次发送的json都会转换成字符串保存到日志文件,但因网络原因发送失败,需要事后补充. ...

最新文章

  1. python automl_分享一篇比较全面的AutoML综述
  2. java环境变量设置--编写一年java,竟不会配变量了
  3. Android实现退出提示的功能
  4. jQuery中操作元素节点appendTo()与prependTo()的区别
  5. [听尉迟方侃侃]平台
  6. 计算机网络基础:网络标准相关知识介绍
  7. 组装电脑配置单报价_组装电脑配置单推荐,性价比高的游戏、画图和办公全能配置电脑!...
  8. 【Flink】Flink 的输出 Output CountingOutput
  9. stl之截取:以一段字符串截取字符串
  10. 使用xml文件存储数据使用xpath查询
  11. python django 优势_为什么选择Django?
  12. 系统内存太少,VirtualBox无法启动虚拟机
  13. 2007最新最强杀毒软件破解大全
  14. 福昕扫描王将取代扫描仪,OCR文字识别应用办公标配
  15. 大事务的处理方式对比
  16. python编译原理 书籍_如何想学点编译原理,又不想直接看龙虎之类的书籍,太多理论,干燥?...
  17. mac os sierra卸载java_如何删除Install macOS High Sierra.app
  18. Android版疯狂填字第三关,iOS/安卓版《疯狂填字》答案攻略第三十八关
  19. vue实现v-chart绑定数据
  20. 【数据结构与算法】数据结构有哪些?算法有哪些?

热门文章

  1. linux关闭cups命令,使用linux的cupsenable命令启动指定的打印机
  2. 爱奇艺CEO龚宇呼吁网络电影涨价:6块钱太低了
  3. “滴血验癌”?昔日“女乔布斯”被控诈骗!身价估值从290亿元直降为0!或面临20年刑期...
  4. 小米MIX 4屏幕规格曝光:华星光电1080P面板 或支持屏下摄像
  5. 欧洲杯推动夜间消费发展 便利蜂晚20时-凌晨2时服务人次创新高
  6. 奖励千万元别墅!椰树集团又来招人了,入职肯定有美女帅哥追?
  7. 特斯拉2020全年交付49.955万辆车,未能完成50万辆目标
  8. 华为Mate40系列或10月15日发布:麒麟9000+66W双向快充
  9. 很遗憾!iPhone 12内部CAD设计图流出:刘海并未缩小
  10. “我在B站有套房”成真:云蹦迪、不停学还健身