Using pm2 Process Manager
PM2 is a great package for running node processes on a server. It supports saving its process list and running at system startup.
Get started with npm i -g pm2 or pnpm i -g pm2
Commands
start
Normally, you would run a process using the following syntax:
$ pm2 start npm -- start
where the -- delineates the arguments to send to the process you are starting. This would be for if your regular start script was npm start.
For other scripts using the run command, you would do
$ pm2 start npm -- run develop
status
You can then check your processes using pm2 status
--name
You can also set a process name using the --name flag
basedir Error Workaround
Apparently there is an incompatibility between pm2 and pnpm where the following error occurs. If trying to run
$ pm2 start pnpm -- develop
you would get the following error:
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
^^^^^^^ SyntaxError: missing ) after argument list
at ...
To get around this, I found that I could just call a script that would run the required commands for me. I like to keep these in a folder to save a bunch of cd-ing.
$ pm2 start ~/launchers/my-job.sh
which contained this simple script
#!/bin/bash
cd ~/code/strapi-demo
pnpm develop
This solved the issue for me. Apparently this may depend on how you installed pnpm (via brew, asdf, npm, scoop, native install script). I had installed via native script.