Nodejs|进程守护工具pm2基本使用[荐]


pm2是一款基于nodejs编写的进程守护软件,其它类似的工具还有很多像forever,supervisor等.萝卜白菜各有所爱,我喜欢它的原因如下:

  • 一键加入开机启动
  • 界面友好
  • 提供监控接口
  • 日志管理方便
  • 自带负载均衡(虽然我没用过)

官方地址:https://github.com/Unitech/pm2
需要nodejs环境支持,前面已经写过了最新版nodejs13.12.0的安装npm的加速,安装慢的可以过去再回顾一下

安装
-g 进行了全局安装,毕竟后面会经常用到

$ npm install -g pm2

查看

$ pm2 -v
4.2.3

开机启动

pm2  startup
[PM2] Init System found: systemd
...
Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
Created symlink /etc/systemd/system/multi-user.target.wants/pm2-root.service → /etc/systemd/system/pm2-root.service.
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

保存进程列表
pm2可以开机启动了,如果想让它守护的进程也同步启动的话,每次添加完服务,记录执行下面的命令

$ pm2 save

取消开机启动
想放弃pm2用这个

$ pm2 unstartup systemd

常用命令
为了演示方便,准备了两个脚本

cat >py_http.sh <<'EOF'
#!/bin/bash
python -mSimpleHTTPServer 8082
EOF
cat >time.py<<'EOF' 
#!/usr/bin/python
import time
while True:
    print("Start: %s" % time.ctime())
    time.sleep(1)
EOF

py_http.sh是python一句话启动http
time.py 是每隔一秒输出一下时间
直接拷贝到终端执行就可以了

启动应用

pm2 start py_http.sh
pm2 start time.py

查看应用状态

pm2 list  
┌─────┬────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name       │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ py_http    │ default     │ N/A     │ fork    │ 21340    │ 101m   │ 0    │ online    │ 0%       │ 3.0mb    │ root     │ disabled │
│ 1   │ time       │ default     │ N/A     │ fork    │ 22098    │ 98m    │ 0    │ online    │ 0%       │ 6.4mb    │ root     │ disabled │
└─────┴────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

查看应用启动信息
pm2 show 0|py_http都可以

pm2 show py_http
 Describing process with id 0 - name py_http 
┌───────────────────┬───────────────────────────────────┐
│ status            │ online                            │
│ name              │ py_http                           │
│ namespace         │ default                           │
│ version           │ N/A                               │
│ restarts          │ 0                                 │
│ uptime            │ 101m                              │
│ script path       │ /root/pm2_manager/py_http.sh      │
│ script args       │ N/A                               │
│ error log path    │ /root/.pm2/logs/py-http-error.log │
│ out log path      │ /root/.pm2/logs/py-http-out.log   │
│ pid path          │ /root/.pm2/pids/py-http-0.pid     │
│ interpreter       │ bash                              │
│ interpreter args  │ N/A                               │
│ script id         │ 0                                 │
│ exec cwd          │ /root/pm2_manager                 │
│ exec mode         │ fork_mode                         │
│ node.js version   │ N/A                               │
│ node env          │ N/A                               │
│ watch & reload    │ ✘                                 │
│ unstable restarts │ 0                                 │
│ created at        │ 2020-04-06T01:44:14.585Z          │
└───────────────────┴───────────────────────────────────┘
 Divergent env variables from local env 

查看应用实时日志
pm2 logs id|name
pm2 logs 1 或 pm2 logs time

pm2 logs 1
[TAILING] Tailing last 15 lines for [1] process (change the value with --lines option)
/root/.pm2/logs/time-error.log last 15 lines:
/root/.pm2/logs/time-out.log last 15 lines:
1|time     | Start: Mon Apr  6 11:27:06 2020
1|time     | Start: Mon Apr  6 11:27:07 2020
1|time     | Start: Mon Apr  6 11:27:08 2020
1|time     | Start: Mon Apr  6 11:27:10 2020
1|time     | Start: Mon Apr  6 11:27:11 2020
1|time     | Start: Mon Apr  6 11:27:12 2020
1|time     | Start: Mon Apr  6 11:27:13 2020
1|time     | Start: Mon Apr  6 11:27:14 2020
1|time     | Start: Mon Apr  6 11:27:15 2020
1|time     | Start: Mon Apr  6 11:27:16 2020
1|time     | Start: Mon Apr  6 11:27:17 2020
1|time     | Start: Mon Apr  6 11:27:18 2020
1|time     | Start: Mon Apr  6 11:27:19 2020
1|time     | Start: Mon Apr  6 11:27:20 2020
1|time     | Start: Mon Apr  6 11:27:21 2020

重启应用
pm2 restart id|name|all

pm2 restart 0

重新加载
pm2 reload id|name|all

pm2 reload 0 

停止应用
pm2 stop id|name|allv

pm2 stop 0

删除应用
pm2 delete id|name|all

pm2 delete 0

监控应用

pm2 monit


上下移动右边显示不同log
先写这么面,后面会一下跟promethous(普罗米休斯)的监控搭配

pm2-prometheus


相关博文

About rainbird

IOS攻城狮
This entry was posted in NodeJS and tagged , , , , , , , , . Bookmark the permalink.

发表评论