При роботі з NodeJs постійно постає задача запуску скріптів в режимі сервісів щоб вони постійно працювали, перезапускаючись післі закриття по причині помилки чи перезапуску сервера. Раніше для цього писалися спеціальні bash скріпти для лінукса, які цим займалися, але в них було повно недоліків: треба самому прописувати всі деталі, логи, статистику, під кожну версію Linux потрібний свій варіант.

Нещодавно знайшов корисний менеджер для цих задач – PM2

Install PM2

$ npm install pm2 -g

Start an application

$ pm2 start app.js

Update PM2

# Install latest pm2 version
$ npm install pm2 -g
# Save process list, exit old PM2 & restore all processes
$ pm2 update

Основні команди:

# Fork mode
$ pm2 start app.js --name my-api # Name process

# Cluster mode
$ pm2 start app.js -i 0        # Will start maximum processes with LB depending on available CPUs
$ pm2 start app.js -i max      # Same as above, but deprecated.

# Listing

$ pm2 list               # Display all processes status
$ pm2 jlist              # Print process list in raw JSON
$ pm2 prettylist         # Print process list in beautified JSON

$ pm2 describe 0         # Display all informations about a specific process

$ pm2 monit              # Monitor all processes

# Logs

$ pm2 logs [--raw]       # Display all processes logs in streaming
$ pm2 flush              # Empty all log file
$ pm2 reloadLogs         # Reload all logs

# Actions

$ pm2 stop all           # Stop all processes
$ pm2 restart all        # Restart all processes

$ pm2 reload all         # Will 0s downtime reload (for NETWORKED apps)
$ pm2 gracefulReload all # Send exit message then reload (for networked apps)

$ pm2 stop 0             # Stop specific process id
$ pm2 restart 0          # Restart specific process id

$ pm2 delete 0           # Will remove process from pm2 list
$ pm2 delete all         # Will remove all processes from pm2 list

# Misc

$ pm2 reset <process>    # Reset meta data (restarted time...)
$ pm2 updatePM2          # Update in memory pm2
$ pm2 ping               # Ensure pm2 daemon has been launched
$ pm2 sendSignal SIGUSR2 my-app # Send system signal to script
$ pm2 start app.js --no-daemon
$ pm2 start app.js --no-vizion
$ pm2 start app.js --no-autorestart

Щоб створити Upstart script на Linux потрібно виконати

sudo env PATH=$PATH:/usr/local/bin pm2 startup -u safeuser

Для запуску скріптів в даному режимі на деяких операційних системах потрібно виконати інші команди, які описані тут.

$ pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freesd | systemd | systemv | upstart | launchd | rcd]

Після чого потрібно під правами адміністратора виконати команду яка буде виведення на екран.

[PM2] You have to run this command as root. Execute the following command:
      sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v4.3/bin pm2 startup <distribution> -u <user> --hp <home-path>

І в кінці зберегти зміни.

$ pm2 save

Корисне посилання: How To Use PM2 to Setup a Node.js Production Environment On An Ubuntu VPS

GitHub: https://github.com/Unitech/pm2

PM2 StartUp: http://pm2.keymetrics.io/docs/usage/startup/

Схожі статті