При роботі з 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/