При работе с NodeJs постоянно стоит задача запуска скриптов в режиме сервисов чтобы они постоянно работали, перезапускаючись после закрытия по причине ошибки или перезапуска сервера. Ранее для этого писались специальные bash скрипты для линукса, которые этим занимались, но в них было полно недостатков: нужно самому прописывать все детали, логи, статистику, под каждую версию Linux нужен свой вариант.
Недавно нашел полезный менеджер для этих задач – PM2
Основные команды:
# 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
Полезная ссылка: How To Use PM2 to Setup a Node.js Production Environment On An Ubuntu VPS