安装 PM2
Linux
Windows
安装 pm2-windows-service
npm i -g pm2-windows-service
安装服务
将 PM2 注册成 Windows 服务
以管理员身份打开 CMD,运行 pm2-service-install
pm2-service-install
在安装后会有以下提示
? Perform environment setup (recommended)? (Y/n)
选择 n,此时,PM2 服务已经安装成功了
可以通过 win + r
+ services.msc
查看是否存在 PM2 服务
PM2 常用命令
# 启动应用程序
pm2 start ecosystem.config.js
# 还可以启动其他类型的应用程序,如 bash 命令、脚本、二进制文件
pm2 start "npm run start"
pm2 start "ls -la"
pm2 start app.py
# 启动并查看日志
pm2 start api.js --attach
# 在--之后传递的所有选项都将作为参数传递给应用程序
# 设置应用名称
pm2 start ecosystem.config.js --name app
# 监听模式(当文件发生变化,自动重启)
pm2 start ecosystem.config.js --watch
# 停止应用
pm2 stop [all | 应用ID | 应用名称]
# 删除应用
pm2 delete [all | 应用ID | 应用名称]
# 创建开机自启
pm2 startup
# 静态服务器(将目录 dist 作为静态服务器根目录,端口为 3000)
pm2 serve ./dist 3000
# 重新启动(同时杀死并重启所有进程,短时间内服务不可用)
pm2 restart [all | 应用ID | 应用名称]
# 0秒停机重新加载
pm2 reload [all | 应用ID | 应用名称]
# 优雅地以群集模式重新加载所有应用程序
pm2 gracefulReload all
# 查看启动列表
pm2 list
# 查看每个应用程序占用情况
pm2 monit
# 显示应用程序所有信息
pm2 show [all | 应用ID | 应用名称]
# 日志查看
pm2 logs [all | 应用ID | 应用名称]
# 保存当前应用列表
pm2 save
# 重启保存的应用列表
pm2 resurrect
# 清除保存的应用列表
pm2 cleardump
# 保存并恢复PM2进程
pm2 update
# 生成示例配置文件
pm2 init 或 pm2 ecosystem
配置文件
module.exports = {
apps : [{
// 应用程序名称(默认为不带扩展名的脚本文件名)
name: 'app',
// 相对于 pm2 start 的脚本路径
script: 'index.js',
// 将启动您的应用程序的目录
cwd: '/var/www/',
// 包含通过 CLI 传递给脚本的所有参数的字符串
args: '-a 13 -b 12',
// 解释器绝对路径(默认为 node)
interpreter: '/usr/bin/java',
// 传递给解释器的选项
interpreter_args: '–harmony',
// interpreter_args 的别名
node_args: '–harmony',
// 要启动的应用实例数量,可以是整数或负数
instances: -1,
// 启动应用程序的模式,可以是 cluster 或 fork,默认fork
exec_mode: 'cluster',
// 启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载
watch: true,
// 通过监视功能忽略某些文件或文件夹名称的正则表达式列表
ignore_watch: [“[\/\]./”, “node_modules”],
// 如果超过指定的内存量,您的应用程序将重新启动。可以是“10M”、“100K”、“2G”等等……
max_memory_restart: '150M'
// 将出现在您的应用程序中的 env 变量
env: {
// 静态服务路径
PM2_SERVE_PATH: ".",
// 静态服务器访问端口
PM2_SERVE_PORT: 3000,
// 启动默认模式
NODE_ENV: 'development'
},
// 在执行pm2时注入,pm2 restart app.yml --env
env_production : {
// 使用production模式 pm2 start ecosystem.config.js --env production
NODE_ENV: 'production'
},
// 默认为 true,[enable/disable源映射文件]
source_map_support: true,
// 为每个启动的实例增加一个环境变量
instance_var: 'NODE_APP_INSTANCE',
// 排除以“REACT_”开头的全局变量,并且不允许它们渗透到集群中。
filter_env: ['REACT_'],
// 日志日期格式
log_date_format: "YYYY-MM-DD HH:mm:ss",
// 错误文件路径 (默认为:$HOME/.pm2/logs/XXXerr.log),pm2 install pm2-logrotate进行日志文件拆分
error_file: './error.log',
// 输出文件路径 (默认为:$HOME/.pm2/logs/XXXout.log)
out_file: './out.log',
// 如果设置为true,则避免在日志文件后面添加进程id
combine_logs: true,
// combine_logs的别名,集群情况下,可以合并日志
merge_logs: true,
// 进程id文件路径 (默认为:$HOME/.pm2/pid/app-pm_id.pid)
pid_file: './app-pm_id.pid',
// 最小正常运行时间
min_uptime: 3000,
// 超时重新加载(单位:毫秒)
listen_timeout: 8000,
// 超时发出SIGKILL信号,以供杀死进程
kill_timeout: 1600,
// 使用process.send(‘shutdown’)关闭应用程序,而不是process.kill(pid, SIGINT)
shutdown_with_message: false,
// 等待process.send(‘ready’),而不是重新加载等待监听事件
wait_ready: false,
// 最大重启次数
max_restarts: 10,
// 重启延迟时间
restart_delay: 4000,
// 自动重启
autorestart: false,
// 定时重启
cron_restart: '1 0 * * *',
// 如果为false, PM2启动时将不带viszion特性(版本控制元数据)
vizion: false,
// 从Keymetrics仪表板执行Pull/Upgrade操作后将执行的命令列表
post_update: ['npm install', 'echo launching the app'],
// 默认为false。如果为true,则可以多次启动相同的脚本
force: true,
}],
// 部署脚本
deploy : {
// 生产环境
production : {
// SSH key 路径
key: '$HOME/.ssh',
// SSH 用户
user: 'SSH_USERNAME',
// SSH 主机
host: 'SSH_HOSTMACHINE',
// SSH 端口
port: 22,
// 没有命令行标志的SSH选项
ssh_options: 'StrictHostKeyChecking=no',
// git 远程/分支
ref : 'origin/master',
// git 地址
repo: 'GIT_REPOSITORY',
// 服务器文件路径
path: 'DESTINATION_PATH',
// 在本地机器上预先设置的命令或脚本路径
pre-setup: '',
// 在本地机器上安装后设置的命令或脚本路径
post-setup: '',
// 本地预部署
pre-deploy: 'git fetch --all',
// 后部署
post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'
}
}
};
PM2 部署 Java 项目
初始化配置文件
pm2 init
修改配置文件
module.exports = {
apps: [
{
name: 'java-demo',
script: 'java',
args: [
"-jar",
"demo.jar",
]
}
]
}
部署并启动项目
pm2 start ecosystem.config.js
查看应用状态
pm2 show java-demo