Пример автостарта и поднятия упавшего приложения nodejs

Php-разработчики попросили  помочь с решением проблемы автозапуска nodejs приложения после загрузки ОС и его автоматического "поднятия" если оно упадет. С nodejs я на "вы", поэтому начал искать в интернете готовые решения.

Возможные частично удовлетворяющие решения: запуск в кроне после перезагрузки, написание init-скрипта, forever-service (вроде как может поднимать упавшие приложения nodejs,  но в свою очередь ему самому как-то надо стартовать). Правильным выглядит использование systemd (там и автозагрузка, и поднятие упавшего приложения), но на сервере стоит 7 wheezy. Можно, конечно, его поставить, но поломать рабочий сайт не совсем  хотелось.

Из простого и не затратного по времени показалась установка и  использование monit.

 

 Исходные данные:

cat /etc/debian_version
7.9
uname -r
3.16.0-0.bpo.4-amd64

 

Веб-разработчики описали каким образом стартуют приложение:

 su user  #под этим пользователем запускается приложение

cd /home/user/taxi/

forever start app.js

forever stopall

 

Приложение открывает tcp-port 3030.

 

Ставим и настраиваем софт:

apt-get install monit

 
# tail /etc/monit/monitrc
  check process nodejs matching /home/user/taxi/app.js            #Проверяем что есть такой процесс


   start program = "/usr/local/bin/forever --pidFile /home/user/.forever/pids/js.pid  -a \
 -l /home/user/.forever/log.log  -o /home/user/.forever/log.log -e /home/user/.forever/log.log \
 --workingDir /home/user/taxi --sourceDir /home/user/taxi start app.js"  as uid user and gid website   #Команда для запуска приложения под пользователем user

   stop program  = "/usr/local/bin/forever stopall" as uid website and gid website
if failed host 127.0.0.1 port 3030 type tcp                                        #Проверка того, что приложение запустилось и принимает соединения по порту 3030

then restart

 

 

 

 

Проверяется  запущен ли  процесс app.js, если нет - то приложение nodejs запускается. В случае если приложение перестало слушать tcp-порт 3030, то тогда делаем его stop-start.

Если не прописать все эти флаги, то forever не сможет найти рабочую директорию, в которой необходимо запускать приложение, будет пытаться записать логи и pid в /root/.forever (где ему не хватит прав).

Please publish modules in offcanvas position.