我在以下情况pm2
下运行(这是在 Amazon Linux2023 上)时遇到问题。守护进程运行良好,如果进程死亡,它会重新启动。但是,如果服务器重新启动,重新启动,并且它pm2-root
systemd
pm2-root
说它已经重启了所有进程,但还没有。例如:
# pm2 ls
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 3 │ IDAP Dev │ fork │ 0 │ stopped │ 0% │ 0b │
│ 4 │ IDAP Website │ fork │ 0 │ online │ 0% │ 0b │
│ 10 │ Mirovoy NextJS │ fork │ 0 │ online │ 0% │ 0b │
│ 5 │ Reanthropize │ fork │ 0 │ online │ 0% │ 0b │
│ 6 │ Reanthropize Stage │ fork │ 0 │ online │ 0% │ 0b │
│ 1 │ lp-api │ fork │ 0 │ online │ 0% │ 0b │
│ 9 │ url-shortener │ fork │ 0 │ online │ 0% │ 0b │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
我已经手动干预了 ID 3、9 和 10,但是让我们看一下 1(desc
最后是完整的):
# pm2 desc 1
Describing process with id 1 - name lp-api
┌───────────────────┬────────────────────────────────────────────────────────────┐
│ status │ online │
│ restarts │ 0 │
│ uptime │ 23h │
│ pid path │ /root/.pm2/pids/lp-api-1.pid │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2022-08-23T14:26:17.285Z │
└───────────────────┴────────────────────────────────────────────────────────────┘
日志中什么也没有:
# pm2 logs 1
[TAILING] Tailing last 15 lines for [1] process (change the value with --lines option)
/root/.pm2/logs/lp-api-out.log last 15 lines:
/root/.pm2/logs/lp-api-error.log last 15 lines:
但它肯定没有运行:
# ll /root/.pm2/pids/
total 8
-rw-r--r--. 1 root root 5 Sep 26 10:09 Mirovoy-NextJS-10.pid
-rw-r--r--. 1 root root 5 Sep 26 00:01 url-shortener-9.pid
# lsof -i -P -n | grep LISTEN | grep 9292
#
但是如果我现在手动重新启动它:
# pm2 stop 1
[PM2] Applying action stopProcessId on app [1](ids: [ '1' ])
[PM2] [1](1) ✓
# pm2 delete 1
[PM2] Applying action deleteProcessId on app [1](ids: [ '1' ])
[PM2] [lp-api](1) ✓
# cd /mnt/data/www/vhosts/chrisrichardson.info/landing-page-api // cd to exec cwd
# pm2 start npm --name lp-api -- run prod // run script args
一切都很好
# ll /root/.pm2/pids/
total 12
-rw-r--r--. 1 root root 5 Sep 26 10:09 Mirovoy-NextJS-10.pid
-rw-r--r--. 1 root root 5 Sep 26 11:19 lp-api-11.pid // <- PID now here
-rw-r--r--. 1 root root 5 Sep 26 00:01 url-shortener-9.pid
# lsof -i -P -n | grep LISTEN | grep 9292
node 79177 root 19u IPv6 410747 0t0 TCP *:9292 (LISTEN)
我如何让它在系统重启时真正启动这些进程,而不是只是假装/认为它启动了?
笔记:我还包含了手动干预后的完整描述,我唯一看到的是存在一些env
分歧,但我不明白这是如何导致问题的。
附录
完整输出pm2 desc 1
:
Describing process with id 1 - name lp-api
┌───────────────────┬────────────────────────────────────────────────────────────┐
│ status │ online │
│ name │ lp-api │
│ namespace │ default │
│ version │ N/A │
│ restarts │ 0 │
│ uptime │ 24h │
│ script path │ /bin/npm │
│ script args │ run prod │
│ error log path │ /root/.pm2/logs/lp-api-error.log │
│ out log path │ /root/.pm2/logs/lp-api-out.log │
│ pid path │ /root/.pm2/pids/lp-api-1.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 1 │
│ exec cwd │ /mnt/data/www/vhosts/chrisrichardson.info/landing-page-api │
│ exec mode │ fork_mode │
│ node.js version │ 17.9.0 │
│ node env │ N/A │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2022-08-23T14:26:17.285Z │
└───────────────────┴────────────────────────────────────────────────────────────┘
Divergent env variables from local env
┌──────────────┬──────────────────────┐
│ HOSTNAME │ ip-10-0-4-227.eu-cen │
│ SUDO_COMMAND │ /bin/su │
│ LANG │ en_GB.UTF-8 │
│ LS_COLORS │ rs=0:di=38;5;27:ln=3 │
│ PATH │ /sbin:/bin:/usr/sbin │
│ _ │ /bin/pm2 │
└──────────────┴──────────────────────┘
Add your own code metrics: http://bit.ly/code-metrics
Use `pm2 logs lp-api [--lines 1000]` to display logs
Use `pm2 env 1` to display environment variables
Use `pm2 monit` to monitor CPU and Memory usage lp-api
desc
人工干预后的完整输出:
# pm2 desc 11
Describing process with id 11 - name lp-api
┌───────────────────┬────────────────────────────────────────────────────────────┐
│ status │ online │
│ name │ lp-api │
│ namespace │ default │
│ version │ N/A │
│ restarts │ 0 │
│ uptime │ 7m │
│ script path │ /root/.nvm/versions/node/v18.17.1/bin/npm │
│ script args │ run prod │
│ error log path │ /root/.pm2/logs/lp-api-error.log │
│ out log path │ /root/.pm2/logs/lp-api-out.log │
│ pid path │ /root/.pm2/pids/lp-api-11.pid │
│ interpreter │ node │
│ interpreter args │ N/A │
│ script id │ 11 │
│ exec cwd │ /mnt/data/www/vhosts/chrisrichardson.info/landing-page-api │
│ exec mode │ fork_mode │
│ node.js version │ 18.17.1 │
│ node env │ N/A │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2023-09-26T11:19:35.717Z │
└───────────────────┴────────────────────────────────────────────────────────────┘
Actions available
┌────────────────────────┐
│ km:heapdump │
│ km:cpu:profiling:start │
│ km:cpu:profiling:stop │
│ km:heap:sampling:start │
│ km:heap:sampling:stop │
└────────────────────────┘
Trigger via: pm2 trigger lp-api <action_name>
Code metrics value
┌────────────────────────┬───────────┐
│ Used Heap Size │ 15.67 MiB │
│ Heap Usage │ 90.12 % │
│ Heap Size │ 17.38 MiB │
│ Event Loop Latency p95 │ 1.13 ms │
│ Event Loop Latency │ 0.23 ms │
│ Active handles │ 5 │
│ Active requests │ 0 │
└────────────────────────┴───────────┘
Divergent env variables from local env
Add your own code metrics: http://bit.ly/code-metrics
Use `pm2 logs lp-api [--lines 1000]` to display logs
Use `pm2 env 11` to display environment variables
Use `pm2 monit` to monitor CPU and Memory usage lp-api