pm2
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pm2相关的知识,希望对你有一定的参考价值。
Centos7安装nodejs、npm、pm2
1、 安装软件包:
安装nodejs
# yum -y install nodejs
安装npm
#yum -y install npm
安装pm2
#npm install pm2 -g
常用命令:
$ npm install pm2 -g # 命令行安装 pm2
$ pm2 start app.js -i 4 # 后台运行pm2,启动4个app.js
# 也可以把‘max‘ 参数传递给 start
# 正确的进程数目依赖于Cpu的核心数目
$ pm2 start app.js --name my-api # 命名进程
$ pm2 list # 显示所有进程状态
$ pm2 monit # 监视所有进程
$ 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
startapp.js -i
max# 根据有效CPU数目启动最大进程数目
$ pm2
startapp.js -i
3# 启动3个进程
$ pm2
startapp.js -x
#用fork模式启动 app.js 而不是使用 cluster
$ pm2
startapp.js -x
-- -a 23 # 用fork模式启动 app.js 并且传递参数 (-a 23)
$ pm2
startapp.js
--name serverone # 启动一个进程并把它命名为 serverone
$ pm2
stopserverone
# 停止 serverone 进程
$ pm2
startapp.json
# 启动进程, 在 app.json里设置选项
$ pm2
startapp.js -i
max-- -a 23 #在--之后给 app.js 传递参数
$ pm2
startapp.js -i
max-e err.
log-o out.
log# 启动 并 生成一个配置文件
你也可以执行用其他语言编写的app ( fork 模式):
$ pm2
startmy-bash-script.sh -x
--interpreter bash
$ pm2
startmy-python-script.py -x
--interpreter python
Pm2升级:
$git clone
https:/
/github.com/Unitech/pm2.git
$ cd pm2
$npm install
# 或者 npm install --dev ,如果devDependencies 没有安装
$ npm test
Pm2 回滚
1、查看当前的deploy的deploy id及commit-id:
# pm2 deploy ecosystem.josn daily curr
2、查看上一次deploy的deploy id及commit-id:
# pm2 deploy ecosystem.json daily prev
3、查看所有的deploy的deploy id及commit-id:
# pm2 deploy ecosystem.json daily list
4、回滚到相应的版本:
# pm2 deploy ecosystem.json daily revert deploy-id
2、 使用放式:
1) nginx配置
server {
server_name your.domain.com;
return 301 $scheme://domain.com$request_uri;
}
server {
listen 80;
server_name domain.com;
client_max_body_size 10G;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-nginx-Proxy true;
proxy_pass http://127.0.0.1:3000;
proxy_redirect off;
proxy_buffering off;
}
}
2) deploy
#app.js
var express = require(‘express’);
var app = express();
app.get(‘/‘, function(req, res) {
res.send(‘Hello, World!’);
});
var server = app.listen(3000, function() {
console.log(‘Server listening at http://%s:%s‘, host, port);
});
#pm2
生成pm2的配置文件,pm2使用ecosystem.json为配置文件,使用以下命令生成:
# pm2 ecosystem
配置样例:
{
"apps": [
{
"name": "lion-API",
"script": "server.js",
"env": {
"newrelic": "true",
"PORT_SERVER": 10010
},
"instances": 1,
"exec_mode": "cluster",
"merge_logs": true,
"log_date_format" : "YYYY-MM-DD HH:mm Z",
},
{
"name": "lion-adminApiServer",
"script": "admin/adminApiServer.js",
"env": {
"newrelic": "true",
"NEW_RELIC_HOME": "./admin",
"PORT_ADMIN": 10011
},
"instances": 1,
"exec_mode": "cluster",
"max_memory_restart": "900M"
}
],
"deploy": {
"lion": {
"user": "root",
"host": "10.10.105.121",
"ref": "origin/lion",
"repo": "[email protected]:fireball/Saturn.git",
"path": "/data/lion",
"post-setup": "cnpm install",
"post-deploy": "NODE_ENV=daily cnpm install && MONGO_DB=saturn_daily NODE_ENV=daily npm run-script test && pm2 startOrReload deploy/ecosystem.lion.json --env lion",
"env": {
"NODE_ENV": "daily",
"MORGAN": true
}
}
}
}
配置说明:
{ "apps": [ { "name": "mywork",
"cwd": "/srv/node-app/current",
"script": "bin/www",
"log_date_format": "YYYY-MM-DD HH:mm Z",
"error_file": "/var/log/node-app/node-app.stderr.log",
"out_file": "log/node-app.stdout.log",
"pid_file": "pids/node-geo-api.pid",
"instances": 6,
"min_uptime": "200s",
"max_restarts": 10,
"max_memory_restart": "500M",
"cron_restart": "1 0 * * *",
"watch": false,
"merge_logs": true,
"exec_interpreter": "node",
"exec_mode": "cluster",
"autorestart": false,
"vizion": false } ]
}
- apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
- name:应用程序名称
- cwd:应用程序所在的目录
- script:应用程序的脚本路径
- log_date_format: 定义日期格式
- error_file:自定义应用程序的错误日志文件
- out_file:自定义应用程序日志文件
- pid_file:自定义应用程序的pid文件
- instances: 启动的实例数,在cluster模式下使用多实例。
- min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
- max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
- cron_restart:定时启动,解决重启能解决的问题
- watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
- merge_logs:
- exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
- exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
- autorestart:启用/禁用应用程序崩溃或退出时自动重启
- vizion:启用/禁用vizion特性(版本控制)
以上是关于pm2的主要内容,如果未能解决你的问题,请参考以下文章