2015-07-23 2 views
55

Есть ли способ для PM2 запустить стартовый НПМ сценарий или вы просто должны запустить pm2 start app.jsМожет пм2 запустить «старт НПМ» сценарий

Таким образом, в развитии

npm start

Тогда в производство с пм2 вы бы запустить что-то вроде

pm2 start 'npm start'

Существует эквивалентный способ сделать это навсегда

forever start -c "npm start" ./

ответ

94

PM2 теперь поддерживает НПМ старт:

pm2 start npm -- start 
+4

Lifesaver. Можете подтвердить, что это работает в первую очередь. :) – azariah

+0

Это золото! Благодаря! – MadPhysicist

+1

Как вы можете задать имя для процесса при использовании этой команды? Я попытался использовать '--name" приложение ", но он просто установил его в npm. – silverlight513

1

К сожалению, кажется, что пм2 не поддерживает точную функциональность запрошенную https://github.com/Unitech/PM2/issues/1317.

Альтернативой является использование файла ecosystem.jsonGetting started with deployment, который может включать в себя установки для производственной среды и среды разработки. Тем не менее, это все еще использует npm start для загрузки вашего приложения.

+0

Что вы имеете в виду под этим? 'Тем не менее, это по-прежнему использует npm start для загрузки вашего приложения.' Вы можете запустить 'npm start' с помощью' pm2'? – xpepermint

16

Я написал сценарий оболочки ниже (по имени start.sh). Потому что у меня package.json есть prestart вариант. Итак, я хочу запустить npm start.

#!/bin/bash 
cd /path/to/project 
npm start 

Затем начните start.sh на pm2.

pm2 start start.sh --name appNameYouLike 
+0

Это хорошо. К сожалению, это не работает при использовании команды 'startOrRestart'. – xpepermint

9

Да. Используйте pm2 start npm --no-automation --name {app name} -- run {script name}. Оно работает. Флаг --no-automation есть because without it PM2 will not restart your app when it crashes.

+1

Вы не знаете, как использовать этот флаг в файле конфигурации system.js? – Tom

+1

UPDATE: Хорошо, я нашел, что вам нужно указать «automation»: false. – Tom

+0

ошибка: неизвестная опция '--no-automation ' – twigg

5

Престола включить кластеризацию:

pm2 start npm --name "AppName" -i 0 -- run start 

Что вы думаете?

+0

Что делает '-i 0'? –

+1

Начать максимальные процессы в зависимости от доступных CPU (режим кластера) – jdnichollsc

23

Те, кто использует конфигурационный скрипт как .json файл, чтобы запустить процесс PM2 можно использовать npm start или любой другой сценарий, как это -

мое-приложение-pm2.json

{ 
    "apps": [ 
     { 
      "name": "my-app", 
      "script": "npm", 
      "args" : "start" 
     } 
    ] 
} 

Тогда просто -

pm2 start my-app-pm2.json 

Редактировать - Чтобы обработать прецедент, когда у вас есть этот сценарий конфигурации в родительском каталоге и вы хотите запустить приложение в подкаталоге, используйте атрибут cwd.

Предполагая, что наше приложение находится в поддиректории nested-app относительно этого файла конфигурации затем -

{ 
    "apps": [ 
     { 
      "name": "my-nested-app", 
      "cwd": "./nested-app", 
      "script": "npm", 
      "args": "start" 
     } 
    ] 
} 

Подробнее here.

+1

Как это работает, если я хочу запустить сценарий запуска npm из родительской папки? –

+1

Не могли бы вы подробнее рассказать? Я предполагаю, что вы спрашиваете * Как запустить * ** npm start ** * извне каталога проекта? *. –

+0

Я использую сценарий конфигурации для запуска приложений нескольких узлов, находящихся в подпапках. Пакет.json с информацией о скрипте 'start' находится в одном из них. См. Эту статью: https://gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Когда я запустил это, он не знает, откуда должен запускаться npm'. Thx –

0

Теперь Вы можете использовать после того, как:

pm2 start npm -- start 

Следовать по https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319

+0

Можете ли вы расширить свой ответ? Совет из [Как ответить] (http://stackoverflow.com/help/how-to-answer): рекомендуется использовать ссылки на внешние ресурсы, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы у ваших коллег было некоторое представление о том, что это такое и почему он там. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. – moodboom

Смежные вопросы