Manage Node.js App or Processes with PM2 (Process Manager 2)

Recently, my company started a personal project and I was assigned a task to select a server-side framework that fits our needs. Looking and testing out various frameworks, I finally settled on NestJs. I was really impressed by the Code-Quality, Documentation and Versatility it had to offer us. Moreover, Node.js and Typescript were just icing on the cake.

Having developed the application. Finally, we had to deploy it to the server and there came a problem. We had to keep the Node.js process running for forever in the background. We came out with various solutions to this issue but nothing seemed to be idle. Until we discovered a library called PM2 (Process Manager 2) and we instantly fell in love with it.

PM2 (Process Manager 2)

PM2 (Process Manager 2) is a daemon process manager that will help you manage and keep your application online. It’s free, open-source, advance, versatile and cross-platform (Mac, Linux & Windows) production level process manager written in Node.js. Moreover, PM2 isn’t just limited to Node.js but also you’re free to manage the processes of other languages or scripts using the same tool.

Use Cases Of PM2 (Process Manager 2)

There are many ways in which PM2 can be used. Few of which are given below:

  • Running process for forever: PM2’s primary goal is to run the process in the background for forever (Until your server goes down).
  • Restarting process after a server crash or failure: That’s right, PM2 can automatically start your process on the restart of the server every time so you don’t have to.
  • Managing or monitoring logs: PM2 can preserve logs of an individual process so you can view them anytime in the future.

Getting Started

I assume that you have already installed Node.js and NPM into the system. Next steps are easy and can get you started with PM2 in no time. To install PM2 into the system you just have to run one command. Basically, you can use both NPM or Yarn to install PM2.

npm install pm2@latest -g


yarn global add pm2

Basic Commands

To start your app or to run the process in the background you need to use the commands provided by PM2. The simplest way to start, daemonize and monitor your application is by entering the command given below.

# <app> being the filename you want to run
pm2 start <app>

# OR
pm2 start "npm run start"

Once you run the command given above PM2 will start running your app or process in the background and will provide you with an id of the process which you can use to monitor, restart, stop or do various other things with that process. You can also use the --name flag and give it a value in the command to assign the name to the process in case you don’t want to remember the id of the process.

pm2 --name my-app start app

Or, in case you want to see all the processes being managed by PM2.

pm2 list

Or, maybe if you’d like to view the logs of the process. You can supply either supply the name or id of the process to the logs command.

pm2 logs my-app

Moroever, You can also ask PM2 to restart the process if it notices any changes in the file using the flag --watch in the start command.

pm2 --name my-app --watch start app

Starting process on System (re)start or failure

Certain times we need to restart the system. I bet you wouldn’t want to go through all the hustle above if know that you can automate this task and PM2 makes it really easy. All we need to do is save our processes with PM2 and let it handle the rest. For which we use the save command provided to us by PM2. Follow the commands given below to make yourself happy.

# Automatically starts up PM2 on the system start
pm2 startup

# Saves the list of processes to start automatically on system start
pm2 save

There are various other things PM2 has to offer and there isn’t a better place than its documentation itself. Go checkout PM2 documentation for more and let me know how did it help you in the comments below.

1 Comment

  1. SEO Service January 29, 2020 at 4:44 pm

    Awesome post! Keep up the great work! 🙂


Leave A Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.