NodeJS: демон на PM2
Программисты сказали что forever не годится для продакшн хотя один проект нормально работал на нем. Пришлось осваивать новый менеджер.
Установка и настройка PM2
Установка производится трививиально через менеджер пакетов npm:
npm install pm2@latest -g
Настройки как таковой не требуется кроме того что надо запускать из под конкретного пользователя впрочем как и forever. Пробуем запустить приложение:
su pm2
pm2 start /opt/client1/server.js
Запускаем второй процесс:
pm2 start /opt/client2/server.js
Смотрим какие процессы запущены на данный момент:
pm2 monit
Далее чтобы эти процессы запускались автоматически после скажем перезагрузки сервера надо выполнить:
pm2 save
Выполнив данную команду иногда можно получить ошибку в духе:
[PM2] Saving current process list...
>>>> In-memory PM2 is out-of-date, do:
>>>> $ pm2 update
In memory PM2 version: 3.5.2
Local PM2 version: 3.5.1
В этом случае надо переключиться на пользователя root и обновить pm2:
ctrl+d
npm install pm2@latest -g
su pm2
pm2 update
Теперь надо создать скрипт для systemd:
pm2 startup
При этом выплюнет что надо выполнить команду в духе:
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u pm2 --hp /home/pm2
Выполняем указанную команду от рута и пробуем запустить:
ctrl+d
env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup
systemctl start pm2-pm2
Если выходит ошибка вроде:
May 27 21:08:16 ip-172-31-43-61 systemd[1]: pm2-pm2.service: Service hold-off time over, scheduling restart.
May 27 21:08:16 ip-172-31-43-61 systemd[1]: pm2-pm2.service: Scheduled restart job, restart counter is at 5.
May 27 21:08:16 ip-172-31-43-61 systemd[1]: Stopped PM2 process manager.
May 27 21:08:16 ip-172-31-43-61 systemd[1]: pm2-pm2.service: Start request repeated too quickly.
May 27 21:08:16 ip-172-31-43-61 systemd[1]: pm2-pm2.service: Failed with result 'protocol'.
May 27 21:08:16 ip-172-31-43-61 systemd[1]: Failed to start PM2 process manager.
То сперва надо убить все запущенные процессы pm2 и стартовать заново:
ps -ef|grep pm2
....
убиваем все процессы по PID
....
systemctl start pm2-pm2