06月20, 2016

记录pm2

之前看firekylin博客上写着使用pm2,当时没在意是什么。因为linux已经用了forever,所以感觉用不用pm2,问题不是太大。直到我查了一些资料,就感觉pm2要比forever强大多了。

pm2是什么?

简单地说,就是让你的node应用在后台运行,不会因为ctrl+c,或者断开服务器的连接,而结束进程。

对比

对比

pm2.json配置

简单的示例:

{
  "apps": [{
    "name": "firekylin",
    "script": "www/production.js",
    "cwd": "/Users/zhangpu/Documents/firekylin",
    "exec_mode": "fork",
    "max_memory_restart": "1G",
    "autorestart": true,
    "node_args": [],
    "args": [],
    "env": {

    }
  }]
}

apps为一个数组,里面可以存放多个应用,这里一般修改的可能是这几项:

  • name: 应用名称
  • script: 执行的node脚本,比如你的项目里面有一个test.js,平常是node test.js来执行,那么在这里只要写test.js即可。
  • cwd: 项目绝对路径地址
  • exec_mode: 建议是fork,在某些系统下,使用 cluster_mode 会导致pm2 restart 后node进程假死。
  • max_memory_restart: 最大占用内存,当超过时重启

更多配置说明,可以参考这篇文章,当然也可以直接看官网的说明

指令

  • pm2 start xx

  • pm2 stop xx

  • pm2 list: 查看所有运行的进程

  • pm2 logs: 查看日志

  • ...(待补充)

上面的xx,可以为json,或js,或对应的id(当启动多个app时,就会有0-N的顺序id)。

这里只列了我用到的一些指令,更多的等以后有了其他实践,会做一次补充。

关于pm2如何做到自启动

当时看到一篇文章,里面有提到

1.使用pm2启动node :#  pm2 start /home/wwwroot/web.js --watch
2.dump这些进程列表:# pm2 save
3.生成自启动脚本:# pm2 startup
4.赋予权限:# chmod +x /etc/init.d/pm2-init.sh
5.添加服务:#  chkconfig --add pm2-init.sh

1~4的步骤挺顺利的,到了第5步,linux下找不到chkconfig,并且apt-get install也没什么鸟用。

后来查到sysv-rc-conf可以做和chkconfig一样的事,于是乎:

sysv-rc-conf pm2-init.sh on

重启之后,发现并没有生效。(现在想想,是不是和我太心急了有关系,下面会提及)

但是service列表已经存在了这个pm2-init.sh这个服务,可以使用它进行如下操作

service pm2-init.sh stop
service pm2-init.sh start

昨晚搞了一个多小时,搞得电都快没了,还是没有搞定。。

朋友圈里面有运维的兄弟给我留言说试试rc.local。查了一下相关的资料

最后在rc.local里面加了一行

service pm2-init.sh start

重启,等待,一开始刷的时候还是没有,但大概过了15s上下,就可以了。所以我猜测我上面的没成功,是不是和没有等待有关系。

参考资料

本文链接:www.my-fe.pub/post/how-to-play-pm2.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。