Может ли pm2 запустить скрипт 'npm start'

215

Есть ли способ для pm2 запустить скрипт запуска npm или вам просто нужно запустить pm2 start app.js

Так в разработке

npm start

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

pm2 start 'npm start'

Есть эквивалентный способ сделать это в forever:

forever start -c "npm start" ./
svnm
источник
Это расширение для ответа, данного Dhaval stackoverflow.com/a/37775318/4828326 1. Сначала добавьте pm2 в ваш package.json 2. Для режима разработки обновите скрипт json вашего пакета следующим образом: «pm2: dev»: «node_modules / pm2 / bin / pm2-dev start npm - start ",
Рама Кришна

Ответы:

439

PM2 теперь поддерживает запуск npm:

pm2 start npm -- start

Чтобы назначить имя процессу PM2, используйте --nameпараметр:

pm2 start npm --name "app name" -- start
Давал Чаухан
источник
5
Как вы можете установить имя для процесса при использовании этой команды? Я пытался использовать, --name "app"но он просто установил его в npm.
silverlight513
171
pm2 start npm --name "Ваше имя приложения" - start
Laukik Patel
7
Кто-нибудь знает, как установить npm startв файле процесса?
mqchen
2
СПАСИБО БОЛЬШОЕ!
hkg328
3
ах, я думаю, что нашел ответ на свой вопрос. Это не что-то вроде pm2 или npm, это, кажется, * nix способ сказать: «Я закончил с указанием параметров команды и хочу начать передавать аргументы»: unix.stackexchange.com/questions/11376/…
Крис Шмитц
96

Те, кто использует скрипт конфигурации, например .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"
        }
    ]
}

Более подробно здесь .

Джотман Сингх
источник
1
как это работает, если я хочу запустить скрипт запуска npm из родительской папки?
Джанфранко П.
1
Не могли бы вы уточнить немного больше? Я предполагаю, что вы спрашиваете, как запустить npm start вне директории проекта? ,
Джотман Сингх,
Я использую скрипт конфигурации для запуска нескольких узловых приложений, которые находятся в подпапках. В startодном из них находится package.json с информацией о скрипте. Посмотрите эту суть: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Когда я запускаю это, он не знает, откуда npmследует бежать. Спасибо
Джанфранко П.
3
@GianfrancoP. Вы можете использовать cwdатрибут. Проверьте мой отредактированный ответ :)
Jyotman Singh
Я попытался использовать sudo npm, и он показывает ошибку доступа для создания каталога. Я дал все права пользователю root, а также выполнил команду pm2 какsudo pm2 start config.json
Mr AJ
39

Да. Использование pm2 start npm --no-automation --name {app name} -- run {script name}. Оно работает. --no-automationФлаг там , потому что без него PM2 не будет перезапущен приложение , когда он выходит из строя.

jcollum
источник
1
Есть ли у вас какие-либо идеи, как использовать этот флаг в файле конфигурации ecosystem.js?
Том
1
ОБНОВЛЕНИЕ: Хорошо, я нашел это, вам нужно указать «автоматизация»: ложь.
Том
@twigg pm2 --help | grep 'no-autom'возвращает мне одну строку в версии 1.0.2
jcollum
27

Использовать npm run

pm2 start npm --name "{app_name}" -- run {script_name}

carkod
источник
25

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

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

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

pm2 start start.sh --name appNameYouLike
peccu
источник
Это мило. К сожалению, это не работает при использовании startOrRestartкоманды.
xpepermint
@xpepermint просто используйте флаг -f в конце. Это заставляет начать. (то есть он перезапустится, если он уже запущен)
Zeeno
16

Да, мы можем, теперь pm2 поддерживает npm start, - имя для вида приложения.

pm2 start npm --name "app" -- start
KARTHIKEYAN.A
источник
Это ответ, который действительно помог мне. Большое спасибо.
Адеш Кумар
9

Смотрите, чтобы включить кластеризацию:

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

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

jdnichollsc
источник
что делает -i 0?
Йохан Сантана
1
Запускать максимальные процессы в зависимости от доступных процессоров (режим кластера)
jdnichollsc
7

Если вы используете PM2 с помощью узловых модулей, а не глобально, вам нужно будет установить, interpreter: 'none'чтобы вышеуказанные решения работали. Связанные документы здесь .

В ecosystem.config.js:

  apps: [
    {
      name: 'myApp',
      script: 'yarn',
      args: 'start',
      interpreter: 'none',
    },
  ],
Кевин Купер
источник
7

Мне нужно было запустить определенный скрипт npm в моем приложении в pm2 (для каждого env). В моем случае это было, когда я создавал промежуточную / тестовую службу

Команда, которая работала для меня (аргументы должны быть направлены таким образом):

pm2 start npm --name "my-app-name" -- run "npm:script"

Примеры:

pm2 start npm --name "myApp" -- run "start:test"

pm2 start npm --name "myApp" -- run "start:staging"

pm2 start npm --name "myApp" -- run "start:production"

Надеюсь, это помогло

Томер Омри
источник
4

pm2 start npm --name "custom_pm2_name" -- run prod

"scripts": {
    "prod": "nodemon --exec babel-node ./src/index.js"
  }

Это сработало для меня, когда другие не сделали

Люк Робертсон
источник
3

Вы должны указать название приложения, например, myapp.

pm2 start npm --name "appName" -- start

Вы можете проверить это по

pm2 list

Вы также можете добавить время

pm2 restart "id" --log-date-format 'DD-MM HH:mm:ss.SSS' или pm2 restart "id" --time

вы можете проверить журналы по

pm2 log "id" или pm2 log "appName"

получить логи для всего приложения

pm2 logs

Фарадж Али
источник
2

Не забывайте про место перед началом

pm2 start npm --[space]start

поэтому правильная команда:

pm2 start npm -- start
Видура Адикари
источник
1

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

В качестве альтернативы предлагается использовать ecosystem.jsonфайл « Начало работы с развертыванием», который может включать настройки для рабочей среды и сред разработки. Тем не менее, он все еще используется npm startдля загрузки вашего приложения.

snozza
источник
Что ты имеешь в виду? However, this is still using npm start to bootstrap your app.Можете ли вы на самом деле запустить npm startс помощью pm2?
xpepermint
1
pm2 start ./bin/www

может работать

если вы хотите развернуть несколько серверов, вы можете сделать это. вместо pm2 запусти npm - запусти

劉 謹 賢
источник
1

Чтобы запустить PM2 с npm startметодом и дать ему name, запустите это,
pm2 start npm --name "your_app_name" -- start

Чтобы запустить его, передавая формат даты для журналов,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start

Аниш Наир
источник
0

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

pm2 start npm -- start

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

Минь Дао
источник
Можете ли вы расширить свой ответ? Совет от « Как ответить» : ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели представление о том, что это такое и почему оно есть. Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно недоступен.
moodboom
0

Он отлично работает на CentOS 7

PM2 версия 4.2.1

давайте рассмотрим два сценария:

1. npm start //server.js

pm2 start "npm -- start" --name myMainFile

2. запустить npm main //main.js

pm2 start "npm -- run main" --name myMainFile
М. Хамза Раджпут
источник