概述

pm2是一个进程管理工具。使用pm2部署NodeJS服务可以轻松实现负载均衡。

指定用户启动

pm2启动时会指定一个PM2_HOME目录,作为存放日志文件、rpc.sock文件,默认情况下会PM2_HOME指向$HOME/.pm2文件夹,使用其他用户启动pm2时,除非另外指定,否则该环境变量仍然会指向当前用户的家目录下的文件夹,从而会出现Permission denied错误。可以在使用pm2命令前设定该变量:

  1. PM2_HOME='/path/to/.pm2' pm2 start app.js

线上服务通常并不直接使用可登陆用户运行pm2,而是使用一个不具备登陆权限的用户来启动程序。假如要使用www作为服务的启动者,可以通过sudo -u + 用户名来实现:

  1. sudo -u www pm2 PM2_HOME='/path/to/.pm2' start app.js

通过文件配置

通过命令行输入参数来启动服务往往不够直观,pm2支持多种格式的配置文件件。pm2提供了自动生成配置文件模版的便捷命令:

  1. pm2 ecosystem

生成模版和选项echosystem.config.js:

  1. module.exports = {
  2. apps : [{
  3. name: 'API',
  4. script: 'app.js',
  5. // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
  6. args: 'one two',
  7. instances: 1,
  8. autorestart: true,
  9. watch: false,
  10. max_memory_restart: '1G',
  11. env: {
  12. NODE_ENV: 'development'
  13. },
  14. env_production: {
  15. NODE_ENV: 'production'
  16. }
  17. }],
  18. deploy : {
  19. production : {
  20. user : 'node',
  21. host : '212.83.163.1',
  22. ref : 'origin/master',
  23. repo : 'git@github.com:repo.git',
  24. path : '/var/www/production',
  25. 'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
  26. }
  27. }
  28. };

配置文件分为两个部分:appsdepoly,其中deploy与远程部署有关。

json格式的配置文件与js格式类似,只是缺少module.exports=输出的代码。需要说明的是,如果是自己创建js配置文件,其后缀必须是config.js

相关的配置项已经在文末参考中列出。其中比较重要的有几项:

  • cwd:执行script命令时的路径
  • env:默认的环境变量列表
  • env_production:以env_开头的环境变量列表,可以在pm2启动时通过--env选项进行选择

远程部署

pm2不仅支持本地启动,还可以批量远程部署服务。有了pm2,只要写好配置文件,就可以轻松远程部署,这方面跟python的fabric作用相当。

常用命令

  1. $ npm install pm2 -g # 命令行安装 pm2
  2. $ pm2 start app.js -i 4 # 后台运行pm2,启动4个app.js
  3. # 也可以把'max' 参数传递给 start
  4. # 正确的进程数目依赖于Cpu的核心数目
  5. $ pm2 start app.js --name my-api # 命名进程
  6. $ pm2 list # 显示所有进程状态
  7. $ pm2 monit # 监视所有进程
  8. $ pm2 logs # 显示所有进程日志
  9. $ pm2 stop all # 停止所有进程
  10. $ pm2 restart all # 重启所有进程
  11. $ pm2 reload all # 0 秒停机重载进程 (用于 NETWORKED 进程)
  12. $ pm2 stop 0 # 停止指定的进程
  13. $ pm2 restart 0 # 重启指定的进程
  14. $ pm2 startup # 产生 init 脚本 保持进程活着
  15. $ pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615)
  16. $ pm2 delete 0 # 杀死指定的进程
  17. $ pm2 delete all # 杀死全部进程

例子

  1. $ pm2 start app.js -i max # 根据有效CPU数目启动最大进程数目
  2. $ pm2 start app.js -i 3 # 启动3个进程
  3. $ pm2 start app.js -x #用fork模式启动 app.js 而不是使用 cluster
  4. $ pm2 start app.js -x -- -a 23 # 用fork模式启动 app.js 并且传递参数 (-a 23)
  5. $ pm2 start app.js --name serverone # 启动一个进程并把它命名为 serverone
  6. $ pm2 stop serverone # 停止 serverone 进程
  7. $ pm2 start app.json # 启动进程, 在 app.json里设置选项
  8. $ pm2 start app.js -i max -- -a 23 #在--之后给 app.js 传递参数
  9. $ pm2 start app.js -i max -e err.log -o out.log # 启动 并 生成一个配置文件
  10. 你也可以执行用其他语言编写的app ( fork 模式):
  11. $ pm2 start my-bash-script.sh -x --interpreter bash
  12. $ pm2 start my-python-script.py -x --interpreter python

参考

pm2笔记的更多相关文章

  1. pm2 官方文档 学习笔记

    一.安装 1.安装 npm install pm2 -g 2.更新 npm install pm2 -g && pm2 update pm2 update 是为了刷新 PM2 的守护进 ...

  2. Nodejs学习笔记(十三)— PM2

    目录 简介 pm2安装 操作 启动 关闭 其它方式启动/关闭 从PM2中删除 重载和重启 查看详细信息 多项目操作 集群 其它操作 写在之后... 简介 PM2 pm2是一个内置负载均衡的node.j ...

  3. Nodejs学习笔记(十三)—PM2

    简介 PM2 pm2是一个内置负载均衡的node.js应用进程管理器(也支持Windows),其它的类似功能也有不少,但是感觉pm2功能更强,更值的推荐 GitHub地址:https://github ...

  4. 吴裕雄--天生自然python学习笔记:python通过“任务计划程序”实现定时自动下载或更新运行 PM2.5 数据抓取程序数据

    在 Windows 任务计划程序中,设置每隔 30 分钟自动抓取 PM2.5 数据,井保存 在 SQLite 数据库中 . import sqlite3,ast,requests,os from bs ...

  5. 吴裕雄--天生自然python学习笔记:python爬虫PM2.5 实时监测显示器

    PM2.5 对人体的健康影响很大,所以空气中的 PM2.5 实时信息受到越来越多的关注. Python 的 Pandas 套件不但可以自动读取网页中的表格 数据 , 还可对数据进行修改.排序等处理,也 ...

  6. 李宏毅机器学习笔记——新手感悟——PM2.5作业

    python也不会,计算机也不会,啥都不会,只带了个脑子考了计算机研究生.研究生选了人工智能方向.看来注定是漫长的学习之旅. PM2.5作业,我是一个字都看不懂.所以我采用了直接看答案的方案.把答案看 ...

  7. Matplotlib 学习笔记

    注:该文是上了开智学堂数据科学基础班的课后做的笔记,主讲人是肖凯老师. 数据绘图 数据可视化的原则 为什么要做数据可视化? 为什么要做数据可视化?因为可视化后获取信息的效率高.为什么可视化后获取信息的 ...

  8. 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Section 4 The Central Limit Theorem

    Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

  9. 加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 2 Testing Statistical Hypotheses

    Stat2.3x Inference(统计推断)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...

随机推荐

  1. 简历编写技巧-java开发工程师简历实战

    看到一遍简历编写的文章 想到也快找工作了 早晚能够用上 现在摘录如下 640?wx_fmt=jpeg 工欲善其事,必先利其器,这是自古以来的道理.所以如果想找到一份好的工作,一定要先整理一份好的简历. ...

  2. HDU 4745 Two Rabbits(最长回文子序列)(2013 ACM/ICPC Asia Regional Hangzhou Online)

    Description Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon ...

  3. reactor工作模型

  4. EF 4.0 升级到 6.0 问题解决办法

    1.工具->库程序包管理器-> 管理解决方案的Nuget 程序包  找到EntityFramework 管理,勾选把需要进入 EF6.0的 项目,进行升级.

  5. 【bzoj4070】[Apio2015]雅加达的摩天楼 set+堆优化Dijkstra

    题目描述 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼外,雅加达市没有其他摩天楼. 有 M 只叫做 “doge” 的神秘生物 ...

  6. Python 装饰器和抽象类

    #装饰器:对类或者函数进行功能的扩展 ''' #第一步:基本函数 def la(): print('脚踏黄河两岸,手拿机密文件,前面机枪扫射,后面炮火连天') #调用函数 la() la() #第二步 ...

  7. P4016 负载平衡问题

    题目描述 G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入输出格式 输入格式: 文 ...

  8. eclipse启运时显示:Workspace in use or cannot be created, choose a different one

    The time when I runned Eclipse in my computer, it has this information displayed: WorkSpace *** in u ...

  9. MySQL之数据库及表的修改和删除

    本文章来自实验楼的操作过程和其中相应地解释.(博客园不知道怎么回事,上传图片总是失败.) 一.对数据库修改 1)删除数据库的命令为:DROP DATABASE 数据名; 二.对表的修改 1)重命名一张 ...

  10. 【NOIP模拟赛】Evensgn 的债务 乱搞

    biubiu~~~ 我们发现按照这道题的题意我们把一个个人的前后(欠钱,被欠钱)都缩一下,那么他对其他人没有影响,那么我们就可以依次缩完每个人,而且每个人最后的状态都是要买欠要么被欠,那么我们可以知道 ...