Forever + Nodemon работает вместе

Можно ли использовать оба этих пакета вместе?

Так что в основном я хочу иметь лучшее из обоих миров. Запуск сервера автоматически (и перезапуск при возникновении ошибки), а также автоматическое обновление при изменении файла .js.

Ответ 1

Вы должны запустить что-то вроде этого

forever start -c nodemon app.coffee

Ответ 2

Toxa был на правильном пути, вопрос, который cfogelberg поднял, действителен, но чтобы избежать этой проблемы, вы можете сделать следующее:

forever -c "nodemon --exitcrash" app.js

это гарантирует, что nodemon действительно выйдет (вместо того, чтобы дать вам сообщение об ошибке приложения), а затем forever снова забирает его.

В forever --help этот -c указывает команду для запуска в противном случае по умолчанию node. Без -c приводит к ошибке, упоминаемой в комментариях к этому ответу.

Ответ 3

Есть запись об этом в nodemon FAQ:

Если вы используете nodemon с forever (возможно, в производственная среда), вы можете объединить их вместе. Таким образом, если сбой script, навсегда перезапустит script, и если есть файл изменения, nodemon перезапускает ваш script. Более подробно см. issue 30.

Для этого вам нужно добавить следующее: forever:

  • Использовать forever -c nodemon вариант, чтобы навсегда верить запуск nodemon вместо node.
  • Включить флаг nodemon --exitcrash, чтобы обеспечить выход nodemon, если script сбой (или неожиданно завершается).
  • При запросе nodemon навсегда использовать SIGTERM вместо SIGKILL. Это гарантирует, что nodemon может остановить просмотренный nodeобрабатывать чисто.
  • Необязательно добавьте параметр --uid, добавив уникальное имя для вашего процесса. В этом примере uid установлен на foo.

bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js

Чтобы проверить это, вы можете убить процесс server.js и навсегда перезапустите его. Если вы touch server.js nodemon перезапустите его.

Чтобы остановить процесс, контролируемый навсегда и nodemon, просто вызовите следуя, используя uid, который мы назначили выше (foo):

bash forever stop foo

Это остановит процесс nodemon и node, который он контролировал.

Обратите внимание, что я бы не рекомендовал использовать nodemon в производстве окружение - но это потому, что я не хочу, чтобы он перезапускался без моего явная инструкция.

Ответ 4

Я не нашел способ совместного использования обоих пакетов. Я пытался использовать технику @toxa, но когда мое приложение node.js выбрало исключение, nodemon не будет автоматически перезапускать его, вместо этого выводит сообщение об ошибке на вечный журнал:

nodemon] app crashed - waiting for file changes before starting...

Однако навсегда есть опция -w, и следующая команда будет фактически такой же, как если бы я запускал nodemon и навсегда вместе:

forever start -w my-app.js

Недостаток forever -w по сравнению с nodemon: forever не имеет опции -delay, поэтому мой сервер перезапускается один раз для каждого измененного файла.

Ответ 5

Я предпочитаю комбо того, что предлагают Токса и Джубайр.

forever start -c nodemon app.coffee --exitcrash

Ответ 6

Если вам нужно передать аргументы:

forever start -c "nodemon --harmony" app.js --exitcrash

Ответ 7

Я использую forever-service.,

Это то, что сработало для меня. Он выполняет следующие действия: каждый раз, когда файл json или raml в папке dist/assets приложений изменяется, подождите 10 секунд, а затем перезапустите приложение node (server.js script):

$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH"

Затем я могу запустить:

$ service raml start|stop|restart|status

Я также могу запустить службу при перезагрузке сервера с помощью утилиты chkconfig:

$ chkconfig --add raml
$ chkconfig raml on