进程描述文件
Ecosystem File
生态系统文件又或者叫进程描述文件,允许通过文件调整每个进程的行为、选项、环境变量、日志等对基于微服务的应用非常有帮助
支持的配置格式有 Javascript 、JSON、 YAML
PM2支持通过Clipm2 init或者 pm2 ecosystem 生成实例文件,为node模块的格式。具体实例如下
module.exports = {
apps : [
{
name: 'API', // 应用名称
script: 'app.js', // 执行脚本
// Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
args: 'one two', // 启动参数
instances: 1, // 实例数,PM2内置负载均衡,可以开启多个实例
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'
}
}
};
显然一次可以配置多个进程的具体描述
编辑完进程描述文件就可以通过Cli启动 需要注意的是使用Javascript配置需要以.config.js结尾
pm2 [start|restart|stop|delete] ecosystem.config.js
通过参数可以调整启动的动作,下面介绍具体的参数
- --only <app-name,...> 只启动指定名称的应用,可以指定多个
- --env 允许切换系统的运行环境,这在分别部署测试,预生产,生产之类需要环境区分的场景下非常有用。例如
完整的参数如下
-- 基础参数
name: 应用名称|String (app)
script: 脚本路径|String (app.js)
cwd: 工作目录|String (/var/www)
args: 参数|Array,String (--port, --env)
interpreter: 脚本的解释器路径|String (/var/jre/java, /var/python/python)
interpreter_args: 脚本解释器的参数|Array (--Xmx)
-- 高级参数
instances: 实例数|number (1,2,3...)
exec_mode: 执行方式|String (fork, cluster)
watch: 启动监视文件或者目录变化自动重启|boolean (true, false)
ignore_watch: 指watch需要忽略的目录或者文件|Array,String (node_modules)
max_memory_restart: 最大重启内存阈值|String (150M,200M)
env: 环境变量|Object ({NODE_ENV:'dev', port: 8080})
source_map_support: 源代码支持|boolean (true, false)
instance_var: 实例变量|String
filter_env: 过滤运行环境|Array (["REACT_"])
-- 日志
log_date_format: 日志日期格式|Strin (yyyy-MM-dd)
error_file: 错误文件路径|String (/var/logs/xxxerror.log)
out_file: 日志输出路径|String (/var/logs/xxx.log)
combine_logs: 组合日志|boolean (true,false)
merge_logs: 合并日志|boolean (true, false)
pid_file: pid文件路径|String (/var/xxx/app.pid)
-- 控制相关
min_uptime: 最小正常运行时间|String
listen_timeout: 监听启动延迟|number 多少毫秒后启用监听
kill_timeout: 关闭进程延迟|number 多少毫秒后关闭进程
shutdown_with_message: 通过消息关闭|boolean pm2通过 process.send(‘shutdown’) 发送通知,具有关闭由应用控制
wait_ready: pm2等待应用发送process.send(‘ready’)启动
max_restarts: 最大连续重启次数|number 最大重启次数,超过不再尝试启动应用
restart_delay: 重启延迟|number 重启延迟多少毫秒后执行
autorestart: 自动重启|boolean (true, false)
cron_restart: 定时重启|String 通过cron表达式控制应用的重启时间
管理非NODE进程
看到这里如果您细心的话,一定发现。貌似PM2不止可以管理和守护NODE应用,
事实上PM2的确可以跨语言执行进程,比如JAVA, 下面是一个小例子,通过PM2管理Eureka
- 通过CLI命令行启动
pm2 start java -- -jar eureka.jar --server.port=8088 --name=eureka
- 通过进程描述文件
module.exports = {
name: 'eureka', // 应用名称
/**
* 执行脚本,需要注意的是非Node应用需要在script指定执行的解释器
* 示例指定全路径, 如果环境变量已经配置过了直接指定java就可以了
*/
script: '/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home/bin/java',
/**
* 启动参数
* 执行eureka.jar
* 监听端口8088
*/
args: '-jar eureka.jar --server.port=8088'
}
通过脚本执行后可以通过 pm2 status 或者 pm2 list 检查应用的健康状况

或者比较直观的可以通过pm2内置的监视器实时监测


PM2 PLUS
PM2团队也推出了在线的管理平台PM2 PLUS,可以方便的查看PM2进程的运行情况,免费版提供远程重启,停止,查看日志等功能
专业与商业版支持在线的远程构建