I'm having an issue where I'm running pm2
as pm2-root
under systemd
(this is on Amazon Linux2023). The daemon runs fine, and if a process dies, it restarts it fine. However, if the server reboots, pm2-root
restarts, and it says it's restarted all of the processes, but it hasn't. For example:
# 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 │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
I've already manually intervened with ids 3, 9, and 10, but let's look at 1 (full desc
at end):
# 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 │
└───────────────────┴────────────────────────────────────────────────────────────┘
There's absolutely nothing in the logs:
# 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:
But it's definitely not running:
# 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
#
Yet if I now manually restart it:
# 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
all is good
# 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)
How do I get it to actually start the processes on system reboot, instead of just pretending/thinking it does?
Note: I've also included the full desc of it after manual intervention, and the only thing I see is that there's some env
divergence, but I don't see how that's causing the problem.
Appendix
Full output of 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
Full output of desc
after manual intervention:
# 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