概述
PM2会根据屏幕的大小自动匹配显示模式, 即不同宽度的窗口显示的字段内容不同. 但有时候并不是很合适, 会出现显示错乱的情况. 在默认的情况下, 有一些字段并不需要显示, 因此就需要修改PM2来达到自定义显示方案.
目前我的需求是, 不管屏幕多宽, 总是以精简模式(CONDENSED_MODE)显示, 且显示PID.
找到PM2源码中相关代码位置
使用 which, ls 等找到pm2 的源文件根目录.
[root@s153 ~]# which pm2
/usr/local/node16/bin/pm2
[root@s153 ~]# ll /usr/local/node16/bin/pm2
lrwxrwxrwx 1 root root 31 6月 11 16:47 /usr/local/node16/bin/pm2 -> ../lib/node_modules/pm2/bin/pm2
[root@s153 ~]# cd /usr/local/node16/lib/node_modules/pm2
[root@s153 pm2]# ll
总用量 192
drwxr-xr-x 2 1001 1001 69 6月 11 16:47 bin
-rw-r--r-- 1 1001 1001 102326 6月 11 16:47 CHANGELOG.md
-rw-r--r-- 1 1001 1001 5006 6月 11 16:47 constants.js
-rw-r--r-- 1 1001 1001 2845 6月 11 16:47 CONTRIBUTING.md
-rw-r--r-- 1 1001 1001 34516 6月 11 16:47 GNU-AGPL-3.0.txt
-rw-r--r-- 1 1001 1001 303 6月 11 16:47 index.js
drwxr-xr-x 7 1001 1001 4096 6月 11 16:47 lib
-rw-r--r-- 1 1001 1001 17 6月 11 16:47 LICENSE
drwxr-xr-x 122 1001 1001 4096 6月 11 16:47 node_modules
-rw-r--r-- 1 1001 1001 4477 6月 11 16:47 package.json
-rw-r--r-- 1 1001 1001 3458 6月 11 16:47 paths.js
-rwxr-xr-x 1 1001 1001 87 6月 11 16:47 pm2
-rw-r--r-- 1 1001 1001 6498 6月 11 16:47 README.md
drwxr-xr-x 2 1001 1001 45 6月 11 16:47 types
找到具体的pm2-ls.js 文件
[root@s153 pm2]# cd lib/API/UX
[root@s153 UX]# ll
总用量 56
-rw-r--r-- 1 1001 1001 4983 6月 11 16:47 helpers.js
-rw-r--r-- 1 1001 1001 190 6月 11 16:47 index.js
-rw-r--r-- 1 1001 1001 6638 6月 11 16:47 pm2-describe.js
-rw-r--r-- 1 1001 1001 13703 6月 25 09:48 pm2-ls.js
-rw-r--r-- 1 1001 1001 1187 6月 11 16:47 pm2-ls-minimal.js
-rw-r--r-- 1 root root 13679 6月 25 09:39 pm2-ls.origin.js
修改为精简模式
使用vi打开pm2-ls.js, 修改前先备份.
cp pm2-ls.js pm2-ls.origin.js
vi pm2-ls.js
vi 显示行号
: set number
修改 窗口宽度判断代码, 根据需要修改为合适的大小, 我改成了 1280. 即小于1280宽度的都以精简模式显示. 也可以直接改为 true
12 const CONDENSED_MODE = (process.stdout.columns || 300) < 1280
修改表格的头, 如果是精简模式, 加上pid列( 第85行). 注意, 一定要加在 mode 后面.
80 if (CONDENSED_MODE) {
81 app_head = {
82 id: id_width,
83 name: 20,
84 mode: 10,
85 pid: 10,
86 '↺': 6,
87 status: 11,
88 cpu: 10,
89 memory: 10
90 }
修改显示的字段内容. 第 247行加上了 || true, 即 不管是不是精简模式, 都加上l.pid 属性.
246 // PID
247 if (!CONDENSED_MODE || true)
248 obj[key].push(l.pid)
249
保存, 试试吧! 是不是很清爽了!
: wq
[root@s153 UX]# pm2 ls
┌────┬────────────────────┬──────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ pid │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 6 │ ------------ │ fork │ 1805 │ 0 │ online │ 0% │ 48.9mb │
│ 4 │ ------------------ │ fork │ 1790 │ 0 │ online │ 0% │ 74.3mb │
│ 5 │ ------------------ │ fork │ 1798 │ 0 │ online │ 0% │ 67.4mb │
│ 2 │ ------------------ │ fork │ 1776 │ 0 │ online │ 0% │ 327.5mb │
│ 3 │ ------------------ │ fork │ 12189 │ 4 │ online │ 0% │ 74.1mb │
│ 1 │ --------------- │ fork │ 1769 │ 0 │ online │ 0% │ 82.8mb │
│ 0 │ ---------- │ fork │ 1763 │ 0 │ online │ 0% │ 58.5mb │
│ 7 │ ------------------ │ fork │ 0 │ 45 │ stopped │ 0% │ 0b │
└────┴────────────────────┴──────────┴──────────┴──────┴───────────┴──────────┴──────────┘
以上是我摸索的经验, 如果有更好的方式, 欢迎分享. 谢谢!