运行 node 服务时,如果直接通过 node app 来启动,如果报错了,整个服务就会直接停止运行。所以开发时和在服务器运行时,需要一个进程管理的工具,一般有 forever,pm2,supervisor 这几种。

分别的使用场合:

  • supervisor 监听文件变化,会重启服务,适用于开发调试阶段。
  • forever 管理多个站点,每个站点访问量不大,不需要监控。
  • pm2 网站访问量比较大,需要完整的监控界面。

supervisor

主要特性:

  • 默认监控所有文件、文件夹的变化的;一旦有变化,服务就会重启
# 安装
npm install -g supervisor

# 运行
supervisor myapp

PM2

主要特性:

  • 内建负载均衡(使用 Node cluster 集群模块)
  • 后台运行
  • 0 秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  • 具有 Ubuntu 和 CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口 API ( Nodejs 模块,允许和 PM2 进程管理器交互 )
# 安装
npm install -g pm2

# 用法
$ npm install -g pm2      # 命令行全局安装pm2
$ pm2 start app.js        # 启动app项目
$ pm2 list                # 列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。

# 其他命令
$ pm2 monit               # 监视每个node进程的CPU和内存的使用情况
$ pm2 logs                # 显示所有进程日志
$ pm2 stop all            # 停止所有进程
$ pm2 restart all         # 重启所有进程
$ pm2 reload all          # 0秒停机重载进程 (用于 NETWORKED 进程)
$ pm2 stop 0              # 停止指定的进程
$ pm2 restart 0           # 重启指定的进程
$ pm2 startup             # 产生 init 脚本 保持进程活着
$ pm2 web                 # 运行健壮的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0            # 杀死指定的进程
$ pm2 delete all          # 杀死全部进程

# 运行进程的不同方式
$ pm2 start app.js -i max                         # 根据有效CPU数目启动最大进程数目
$ pm2 start app.js -i 3                           # 启动3个进程
$ pm2 start app.js -x                             # 用fork模式启动 app.js 而不是使用 cluster
$ pm2 start app.js -x -- -a 23                    # 用fork模式启动 app.js 并且传递参数 (-a 23)
$ pm2 start app.js --name serverone               # 启动一个进程并把它命名为 serverone
$ pm2 stop serverone                              # 停止 serverone 进程
$ pm2 start app.json                              # 启动进程, 在 app.json里设置选项
$ pm2 start app.js -i max -- -a 23                # 在--之后给 app.js 传递参数
$ pm2 start app.js -i max -e err.log -o out.log   # 启动 并 生成一个配置文件

pm2 相关文档:https://wohugb.gitbooks.io/pm2/content/

forever

官方的说明是说:A simple CLI tool for ensuring that a given script runs continuously(一个用来持续(或者说永远)运行一个给定脚本的简单的命令行工具)。Github 地址:https://github.com/nodejitsu/forever

# 安装

# 记得加-g,forever要求安装到全局环境下

sudo npm install forever -g


# 启动

# 1. 简单的启动
forever start app.js

# 2. 指定forever信息输出文件,当然,默认它会放到~/.forever/forever.log
forever start -l forever.log app.js

# 3. 指定app.js中的日志信息和错误日志输出文件,
#  -o 就是console.log输出的信息,-e 就是console.error输出的信息
forever start -o out.log -e err.log app.js

# 4. 追加日志,forever默认是不能覆盖上次的启动日志,
#  所以如果第二次启动不加-a,则会不让运行
forever start -l forever.log -a app.js

# 5. 监听当前文件夹下的所有文件改动
forever start -w app.js


# 文件改动监听并自动重启

# 1. 监听当前文件夹下的所有文件改动(不太建议这样)
forever start -w app.js


# 显示所有运行的服务

forever list


# 停止操作

# 1. 停止所有运行的node App
forever stopall

# 2. 停止其中一个node App
forever stop app.js

# 当然还可以这样
# forever list 找到对应的id,然后:
forever stop [id]


# 重启

# 1. 启动所有,重启操作跟停止操作保持一致。
forever restartall