UPDATE 16 FEB 2020:
If it is important to you that PM2 automatically starts up without you logging into the machine (after reboot) please follow my new set of instructions instead of the old ones.
New instructions (recommended):
Prerequisites (part # 1):
First, I have installed NPM in a location which is available to all users. Depending on your use-case(s) it might not be necessary. But if you like to change your default location of NPM – you should do it first (before continuing). Here is how you change it to the location (in terminal as administrator): C:\NodeJS\npm:
npm config set prefix "C:\\NodeJS\\npm"
npm config set cache "C:\\NodeJS\\npm-cache"
npm config set temp "C:\\NodeJS\\temp"
npm config ls -l (this will list all NPM settings -> look for the 3 lines/changes marked as `overriden`)
Prerequisites (part # 2):
- Add and set
PM2_HOMEinSystem environments(not user environments). Like:PM2_HOME=C:\NodeJS\npm - Add
C:\NodeJS\npmto the existing system PATH variable (Then you are sure it will work – there has been some issues reported thatPM2_HOMEnot always working). - Close all terminals and open them again (as administrator). Your terminal windows will now be aware of your environment changes.
Prerequisites (part # 3):
- npm install pm2 -g
- npm i pm2-windows-service -g
- npm install -g npm-check-updates
Currently there is a bug in a module which the package pm2-windows-service uses – so lets fix this as well, please follow the steps below:
- In terminal
cdinto:C:\NodeJS\npm\node_modules\pm2-windows-service ncu inquirerthis only outputs the existing and the newest available version of theinquirermodule we need to update, currently: version:1.1.2–>7.0.4.ncu inquirer -uthis will update your packages.json file.npm installthis will download and update theinquirermodule (please be aware if you don’t use specific version syntax in yourpackages.jsonfile or you have made manually changes –> other modules would be updated as well.
Install and setup PM2 (as a service) to automatically startup after reboot:
- In terminal
cdinto:C:\NodeJS\npm\node_modules\pm2-windows-service pm2-service-install -n PM2_STARTUP_SCRIPT(PM2_STARTUP_SCRIPTwill be the “Display name” of the Windows service. Change it to what you prefer and hitENTER.)- Perform environment setup (recommended)?
Yes - Set PM2_HOME?
No(No need – You have set it already) - Set PM2_SERVICE_SCRIPTS (the list of start-up scripts for pm2)?
Yes - Set the list of startup scripts/files (semi-colon separated json config
files or js files)ENTER(when nothing is entered – it will default to use PM2’sdump.pm2file – which is created when you runPM2 -f save, I will return and explain this later on). -
Set PM2_SERVICE_PM2_DIR (the location of the global pm2 to use with the service)?
Yes -
Specify the directory containing the pm2 version to be used by the
service?ENTER
PM2 service installed and started.
- Open Services in Windows and change the service to run as Administrator (or your preferred role).
Setup the app(s) you like PM2 to startup – when shutdown or after a reboot:
pm2 start myApp.js --name mySuperApppm2 -f save- reboot or if you use AWS (or any other cloud provider). Reboot your instance – wait 5 minutes and then log into the machine and execute
pm2 lsand check your app has been up and running for ~ 5 min (and not only few secs because you just logged in).
Uninstall and cleanup “pm2-windows-startup” from your registry (if you switch from my “old instruction” to the new ones):
- npm uninstall pm2-windows-startup -g
- Delete the
PM2key from registry like in the picture below:

Old instructions (not recommended):
My old answer below is still working – but PM2 doesn’t startup unless you log into the machine because it is loading PM2 from registry and doesn’t run it as a service.
I don’t know why – but after several attempts this worked out (at a fresh installed AWS Windows 2016 BASE instance)
- npm install pm2 -g
- npm install pm2-windows-startup -g
- pm2-startup install
- pm2 start myApp.js –name mySuperApp
- pm2 save
- reboot
- pm2 ls