# 工具介绍
- 可后台运行进程,类似于nohup,但比nohup好用
- 如果进程意外挂掉,pm2会自己重启它,保证进程的持续性
- 可以设置开机启动,让后台脚本持续运行
- 适合用来保护服务器进程不挂掉
# 安装
npm install pm2 -g # yarn方式 yarn global add pm2 # linux apt update && apt install sudo curl && curl -sL https://raw.githubusercontent.com/Unitech/pm2/master/packager/setup.deb.sh | sudo -E bash -
复制成功
1
2
3
4
5
6
7
2
3
4
5
6
7
# 启动服务
# 再对应目录下执行 pm2 start app.js # 给进程起名字 pm2 start app.js --name myName # 后台运行脚本 pm2 start deploy.sh # 开静态资源服务器 pm2 serve ./dist 80 # dev模式持续后台开启,且监听 pm2 start npm --watch -- run dev
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 保护进程
- 进程有可能中途挂掉,或者直接 kill -9 22222 直接强制关掉
- 这种情况,普通的方式启动服务就挂掉了
普通方式
监听方式
总结对比
# 启动服务 # deploy.sh里面有 npm run dev pm2 start deploy.sh # 寻找8080端口的进程号:2222 lsof -i:8080 # 关闭进程号 kill-9 2222 # 查看日志,发现无法恢复 pm2 logs
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 管理进程
# 查看进程产生的日志 pm2 logs pm2 log 0 # 查看所有的服务 pm2 list # 查看程序占用情况 pm2 monit # 进程改名 pm2 restart 0 --name blog
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 关闭服务
pm2 stop all pm2 stop id pm2 stop name
复制成功
1
2
3
4
5
2
3
4
5
# 删除服务
pm2 delete all pm2 delete id pm2 delete name
复制成功
1
2
3
4
5
2
3
4
5
# 开机自动启动
- windows系统
# 使用pm2启动node pm2 start /home/wwwroot/web.js --watch # 确认执行的任务列表 pm2 list # 保存这些进程列表 pm2 save # 生成自启动脚本 pm2 startup # 复制生成的脚本,再执行一次
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- linux(如果上面没有达到效果的话)
# 接着上面的命令 # 开机服务 systemctl enable pm2-root # 重启 reboot
复制成功
1
2
3
4
5
6
2
3
4
5
6
# 问题解决
- 一开程序就stopped
# 应该是换了node版本,原版本开的程序就出问题了 pm2 kill pm2 start 0
复制成功
1
2
3
2
3
# 其他命令
pm2 start app.js --watch
复制成功
1
- 更新pm2
pm2 update
复制成功
1
- 显示进程的所有信息
pm2 show id pm2 show name
复制成功
1
2
3
2
3
# 附录
# nohup
- 后台执行程序,不关机就不会停,适合再linux上运行重复脚本
缺点:少部分情况会挂掉,且不好监控运行情况,pm2更优
# & 代表后台持续运行 nohup bash deploy.sh &
复制成功
1
2
2
v1.4.16