使用 PM2 管理 Node 应用(转)

简介

Node.js应用能够简单地通过命令行启动,只要有Node 运行环境。对于生产环境,情况要复杂得多。不仅需要数据库等功能性组件,更对安全性、可靠性、可扩展性等方面有更高的要求。

PM2是一个针对Node应用且自带负载均衡的进程管理器,拥有forever和Upstart都不具备的特性。能够管理Node 应用,使其随系统启动,出错挂掉能自动重启。还能对应用的运行状态进行监控,为应用生成SystemV, SystemD 服务启动脚本。PM2支持CoffeeScript,可以运行在Linux和OSX环境。

PM2是非常优秀工具,它提供对基于node.js的项目运行托管服务。它基于命令行界面,提供很多特性:

内置的负载均衡器(使用nodecluster module)
以守护进程运行
0s(不间断)重启
为ubuntu/CentOS 提供启动脚本
关闭不稳定的进程(避免无限死循环)
基于控制台监控
HTTP API
远程控制以及实时监控接口
pm2使用nodecluster构建一个内置的负载均衡器。部署多个app的实例来达到分流的目的以减轻单app处理的压力。

安装

npm install pm2 -g
npm install pm2@latest -g
npm install git://github.com/Unitech/pm2#master -g

升级安装

npm install pm2@latest -g
pm2 update  #Update in memory pm2

启动应用

pm2 start <app_name|id|all>  #可以指定应用名称pm2 start app,js --name=test
pm2 start app.js -i 4 --name "episode"   #-i 4 表示启动四个app.js, 也可以-i max 将会最大限度利用cpu核心数目 --name 用于命名进程
pm2 start app.js
pm2 start app.js -i 1  #cluster_mode
pm2 start app.js -i 0  #支持使用多核 CPU
pm2 start big-app.js --max-memory-restart 20M
cluster_mode 需要Node 0.11.x 以上,否则请用fork mode。

传递参数

pm2 start app.js -- -p 8080 
pm2 start app.js --node-args="--debug=7001 --trace-deprecation"

命名应用


NODE_ENV=production pm2 start index.js -n Ghost

生成服务脚本

pm2 startup <ubuntu|centos|gentoo|systemd>  #产生init脚本,保持进程活着

查看信息

pm2 list          # 显示所有进程状态
pm2 jlist         # Print process list in raw JSON
pm2 prettylist    # Print process list in beautified JSON
pm2 info 0        # Display all informations about a specific process

运行控制

pm2 stop 0             # 停止指定进程
pm2 stop all           # 停止所有进程
pm2 restart 0          # Restart specific process id
pm2 restart all        # 重启所有进程
pm2 delete 0           # Will remove process from pm2 list
pm2 delete all         # Will remove all processes from pm2 list
pm2 reload 0           # 类似restart,0秒重载,支持 cluster_mode
pm2 reload all         # Will 0s downtime reload (for NETWORKED apps)
pm2 gracefulReload all # Send exit message then reload (for networked apps)
pm2 dump               # ~/.pm2/dump.pm2
pm2 kill               # 杀掉PM2
pm2 resurrect          # 复活所有进程

代码监控

pm2 start app.js --watch  # 代码修改自动重启
pm2 stop 0                # not stop watching
pm2 stop --watch 0        # stop watching

运行监测

pm2 monit              # Monitor all processes

日志

pm2 logs               # 显示所有进程日志
pm2 ilogs              # Advanced termcaps interface to display logs
pm2 flush              # Empty all log file
pm2 reloadLogs         # Reload all logs

杂项

pm2 ping  # Ensure pm2 daemon has been launched
pm2 reset <process>  # Reset meta data (restarted time...)
pm2 sendSignal SIGUSR2 my-app  # Send system signal to script
pm2 start app.js --no-daemon  # run pm2 daemon in the foreground
pm2 describe id|all #查看启动程序的详细信息
pm2 web  #API(端口:9615)

实例

管理Ghost

cd /path/to/ghost/folder
echo "export NODE_ENV=production" >> ~/.profile
source ~/.profile
pm2 kill
pm2 start index.js --name "Ghost"

# Ghost已经运行在PM2管理下
pm2 ls
pm2 stop <process ID>
pm2 monit
pm2 logs

#生成服务启动脚本:/etc/init.d/pm2-init.sh。只会将pm2 list中的应用加入服务启动脚本,确保需要启动的应用就在其中。不要使用root账户(下面用的是ghost账户)。
pm2 startup ubuntu

#生成命令如下:包含node路径,用户账户。执行即可
sudo env PATH=$PATH:/usr/local/bin pm2 startup ubuntu -u ghost
pm2 save或reboot

参考资料

http://www.google.com
https://github.com/Unitech/pm2
http://www.allaboutghost.com/keep-ghost-running-with-pm2/

来源:运维之美 https://www.hi-linux.com/posts/20296.html

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

推荐阅读更多精彩内容