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


215

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

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

npm start

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

pm2 start 'npm start'

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

forever start -c "npm start" ./

Это расширение для ответа, данного 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 не будет перезапущен приложение , когда он выходит из строя.


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}


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

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

@xpepermint просто используйте флаг -f в конце. Это заставляет начать. (то есть он перезапустится, если он уже запущен)
Zeeno

16

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

pm2 start npm --name "app" -- start

Это ответ, который действительно помог мне. Большое спасибо.
Адеш Кумар

9

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

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

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


что делает -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



1

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

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


Что ты имеешь в виду? 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.