
PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单
安装
npm install pm2 -g目录介绍
$HOME/.pm2 will contain all PM2 related files
$HOME/.pm2/logs will contain all applications logs
$HOME/.pm2/pids will contain all applications pids
$HOME/.pm2/pm2.log PM2 logs
$HOME/.pm2/pm2.pid PM2 pid
$HOME/.pm2/rpc.sock Socket file for remote commands
$HOME/.pm2/pub.sock Socket file for publishable events
$HOME/.pm2/conf.js PM2 Configuration常用命令
--watch 监听应用目录变化,一旦发生变化,自动重启(如果要精确监听或不监听的目录,最好通过config配置)
-i --instances 启用多少个实例,可用于负载均衡。如 -i 0 或者 -i max,根据机器核数确定实例数目
--ignore-watch 排除要监听的目录或文件,可以是特定文件名,也可以是正则,如 --ignore-watch "node_modules"
-n --name 应用的名称,产看应用信息的时候用到
-o --output <path> 标准输出日志文件路径
-e --error <path> 错误输出日志文件路径
--interpreter <interpreter> 启动
pm2 start app.js --watch -i 2重启
pm2 restart app.js停止
# 停止特定的应用。可以先通过pm2 list获取应用的名字(--name指定的)或者进程id。
pm2 stop app_name|app_id删除
# 类似pm2 stop,如下
pm2 stop app_name|app_id
pm2 stop all查看进程状态
pm2 list查看某个进程信息
[root@iZ94wb7tioqZ pids]# pm2 describe 0
Describing process with id 0 - name oc-server
┌───────────────────┬──────────────────────────────────────────────────────────────┐
│ status │ online │
│ name │ oc-server │
│ id │ 0 │
│ path │ /data/file/qiquan/over_the_counter/server/bin/www │
│ args │ │
│ exec cwd │ /data/file/qiquan/over_the_counter/server │
│ error log path │ /data/file/qiquan/over_the_counter/server/logs/app-err-0.log │
│ out log path │ /data/file/qiquan/over_the_counter/server/logs/app-out-0.log │
│ pid path │ /root/.pm2/pids/oc-server-0.pid │
│ mode │ fork_mode │
│ node v8 arguments │ │
│ watch & reload │ │
│ interpreter │ node │
│ restarts │ 293 │
│ unstable restarts │ 0 │
│ uptime │ 87m │
│ created at │ 2016-08-26T08:13:43.705Z │
└───────────────────┴──────────────────────────────────────────────────────────────┘日志查看
pm2 logs常用配置说明
js格式
pm2 ecosystem将生成ecosystem.config.js
module.exports = {
apps : [{
name: 'API',
script: 'app.js',
args: 'one two',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
deploy : {
production : {
user : 'node',
host : '212.83.163.1',
ref : 'origin/master',
repo : 'git@github.com:repo.git',
path : '/var/www/production',
'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
};pm2 start ecosystem.config.jsjson格式
{
"apps": [{
"name": "express_project",
"script": "app.js",
"cwd": "./",
"interpreter": "",
"interpreter_args": "",
"watch": true,
"ignore_watch": ["node_modules", "public"],
"exec_mode": "cluster_mode",
"instances": "max",
"max_memory_restart": "100M",
"error_file": "./logs/app-err.log",
"out_file": "./logs/app-out.log",
"merge_logs": true,
"log_date_format": "YYYY-MM-DD HH:mm:ss",
"min_uptime": "60s",
"max_restarts": 30,
"autorestart": true,
"restart_delay": "60",
"env": {
"NODE_ENV": "production",
"REMOTE_ADDR": ""
},
"env_dev": {
"NODE_ENV": "development",
"REMOTE_ADDR": ""
},
"env_test": {
"NODE_ENV": "test",
"REMOTE_ADDR": ""
}
}]
}pm2 start pm2.jsonpm2 start app.js --env dev可以通过pm2 startup来实现开机自启动
upstream my_nodejs_upstream {
server 127.0.0.1:3001;
}
server {
listen 80;
server_name my_nodejs_server;
root /home/www/project_root;
location / {
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_pass http://my_nodejs_upstream/;
proxy_redirect off;
proxy_read_timeout 240s;
}
}