Чи може pm2 запустити сценарій 'npm start'


212

Чи є спосіб для 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 ",
Рама Кришна

Відповіді:


436

PM2 тепер підтримує npm start:

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

1
ДУЖЕ ДЯКУЮ!
hkg328

3
ах, я думаю, що знайшов відповідь на своє запитання. Це не предмет pm2 або npm, здається, це * nix спосіб сказати "Я закінчую, надаючи параметри команди і хочу розпочати передачу аргументів": unix.stackexchange.com/questions/11376/…
Кріс Шмітц,

96

Ті, хто використовує конфігураційний скрипт, як .jsonфайл для запуску процесу pm2, може використовувати npm startабо будь-який інший подібний сценарій -

my-app-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, починаючи поза каталогу проекту? .
Jyotman Singh

Я використовую сценарій конфігурації для запуску декількох програм у вузлах, які знаходяться в підпапках. Пакет.json з startінформацією про сценарій є в одному з них. Дивіться цю суть: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Коли я запускаю це, він не знає, звідки npmслід бігти. Thx
Gianfranco P.

3
@GianfrancoP. Ви можете використовувати cwdатрибут. Перевір мою відредаговану відповідь :)
Jyotman Singh

Я намагався використовувати sudo npm, і це показує помилку доступу для створення каталогу жорстко. Я дав усі дозволи на користувача як root, а також виконуючи команду pm2 якsudo pm2 start config.json
Містер AJ

39

Так. Використовуйте pm2 start npm --no-automation --name {app name} -- run {script name}. Це працює. --no-automationПрапор там , тому що без нього PM2 НЕ буде перезапущений додаток , коли він виходить з ладу.


1
Чи маєте ви ідею, як використовувати цей прапор всередині файлу конфігурації ecosystem.js?
Том

1
ОНОВЛЕННЯ: Гаразд. Я вважав, що вам потрібно вказати "автоматизація": false.
Том

@twigg pm2 --help | grep 'no-autom'повертає один рядок для мене у версії 1.0.2
jcollum


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 наприкінці. Це змушує почати. (тобто перезапуститься, якщо вже розпочато)
Зеєно,

16

Так, ми можемо, зараз pm2 підтримує npm start, --name для назви виду програми.

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 (для кожної програми) У моєму випадку це було, коли я створив службу постановки / тестування

Команда, яка працювала на мене (аргументи повинні бути передані таким чином):

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/isissue/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 start 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/isissue/1317#issuecomment-220955319


Чи можете ви розширити свою відповідь? Порада, як відповісти : заохочуються посилання на зовнішні ресурси, але, будь ласка, додайте контекст навколо посилання, щоб ваші колеги користувачі мали уявлення про те, що це таке і чому воно існує. Завжди цитуйте найбільш релевантну частину важливого посилання на випадок, якщо цільовий сайт недоступний або перебуває постійно в режимі офлайн.
moodboom

0

Це прекрасно працює на CentOS 7

Версія PM2 4.2.1

візьмемо два сценарії:

1. npm start //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.