Czy pm2 może uruchomić skrypt „npm start”

212

Czy jest sposób na uruchomienie przez pm2 skryptu startowego npm, czy wystarczy uruchomić pm2 start app.js

Tak w fazie rozwoju

npm start

Następnie w produkcji z pm2 uruchomilibyście coś takiego

pm2 start 'npm start'

Istnieje równoważny sposób, aby to zrobić w forever:

forever start -c "npm start" ./
svnm
źródło
Jest to rozszerzenie odpowiedzi udzielonej przez Dhaval stackoverflow.com/a/37775318/4828326 1. Najpierw dodaj pm2 do pliku package.json 2. W trybie programowania zaktualizuj skrypt json pakietu w następujący sposób: „pm2: dev”: „node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Odpowiedzi:

436

PM2 obsługuje teraz npm start:

pm2 start npm -- start

Aby przypisać nazwę do procesu PM2, użyj --nameopcji:

pm2 start npm --name "app name" -- start
Dhaval Chauhan
źródło
5
Jak ustawić nazwę procesu przy użyciu tego polecenia? Próbowałem użyć, --name "app"ale po prostu ustawiłem na npm.
silverlight513
171
pm2 start npm - name „Your APP Name” - start
Laukik Patel
7
Czy ktoś wie, jak ustawić npm startw pliku procesu?
mqchen
1
DZIĘKUJĘ BARDZO!
hkg328,
3
ah, myślę, że znalazłem odpowiedź na moje pytanie. To nie jest kwestia pm2 lub npm, wydaje się to być * nixowym sposobem powiedzenia „Skończyłem dawać opcje poleceń i chcę zacząć przekazywać argumenty”: unix.stackexchange.com/questions/11376/…
Chris Schmitz
96

Ci, którzy używają skryptu konfiguracyjnego jak .jsonpliku do uruchomienia procesu pm2, mogą użyć npm startdowolnego innego skryptu -

my-app-pm2.json

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

Następnie po prostu -

pm2 start my-app-pm2.json

Edycja - Aby obsłużyć przypadek użycia, gdy skrypt ten znajduje się w katalogu nadrzędnym i chcesz uruchomić aplikację w podkatalogu, a następnie użyj cwdatrybutu.

Zakładając, że nasza aplikacja znajduje się w podkatalogu nested-appwzględem tego pliku konfiguracyjnego, wówczas -

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

Więcej szczegółów tutaj .

Jyotman Singh
źródło
1
jak to działa, jeśli chcę uruchomić skrypt startowy npm z folderu nadrzędnego?
Gianfranco P.
1
Czy mógłbyś rozwinąć nieco więcej? Zakładam, że pytasz Jak uruchomić npm start spoza katalogu projektu? .
Jyotman Singh
Używam skryptu konfiguracyjnego do uruchamiania wielu aplikacji węzłów znajdujących się w podfolderach. Plik package.json z startinformacjami o skrypcie znajduje się w jednym z nich. Zobacz tę treść: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Kiedy uruchamiam to, nie wie, skąd npmpowinien uciekać. Dzięki
Gianfranco P.
3
@GianfrancoP. Możesz użyć cwdatrybutu. Sprawdź moją zredagowaną odpowiedź :)
Jyotman Singh 04.04.17
Próbowałem użyć sudo npm i pokazuje błąd dostępu, aby utworzyć twardy katalog. Dałem wszystkie uprawnienia użytkownikowi jako root, a także uruchomiłem komendę pm2 jakosudo pm2 start config.json
Mr AJ
39

Tak. Zastosowanie pm2 start npm --no-automation --name {app name} -- run {script name}. To działa. --no-automationFlaga jest tam , ponieważ bez niego PM2 nie będzie ponownie uruchomić aplikację kiedy się zawiesi.

jcollum
źródło
1
Czy masz pomysł, jak używać tej flagi w pliku konfiguracyjnym ecosystem.js?
Tom
1
AKTUALIZACJA: OK. Znalazłem, że musisz określić „automatyzacja”: fałsz.
Tom
@twigg pm2 --help | grep 'no-autom'zwraca mi jedną linię w wersji 1.0.2
jcollum
27

Używać npm run

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

carkod
źródło
25

Poniżej napisałem skrypt powłoki (o nazwie start.sh). Ponieważ mój package.jsonma prestartopcję. Więc chcę biec npm start.

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

Następnie zacznij start.shod pm2.

pm2 start start.sh --name appNameYouLike
peccu
źródło
To miłe. Niestety nie działa to podczas używania startOrRestartpolecenia.
xpepermint,
@xpepermint wystarczy użyć flagi -f na końcu. Wymusza start. (tzn. uruchomi się ponownie, jeśli już się rozpoczął)
Zeeno
16

Tak, możemy, teraz pm2 obsługuje npm start, --nazwa na nazwę aplikacji gatunku.

pm2 start npm --name "app" -- start
KARTHIKEYAN.A
źródło
To jest odpowiedź, która naprawdę mi pomogła. Wielkie dzięki.
Adesh Kumar
9

Zobacz, aby włączyć klastrowanie:

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

Co myślisz?

jdnichollsc
źródło
co robi -i 0zrobić?
Johhan Santana
1
Uruchom maksymalne procesy w zależności od dostępnych procesorów (tryb klastra)
jdnichollsc
7

Jeśli używasz PM2 za pośrednictwem modułów węzłów zamiast globalnie, musisz ustawić interpreter: 'none', aby powyższe rozwiązania działały. Powiązane dokumenty tutaj .

W ecosystem.config.js:

  apps: [
    {
      name: 'myApp',
      script: 'yarn',
      args: 'start',
      interpreter: 'none',
    },
  ],
Kevin Cooper
źródło
7

Musiałem uruchomić konkretny skrypt npm w mojej aplikacji w pm2 (dla każdej env) W moim przypadku było to, gdy utworzyłem usługę testowania / testowania

Polecenie, które zadziałało dla mnie (argumenty muszą być przekazywane w ten sposób):

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

przykłady:

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

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

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

Mam nadzieję, że to pomogło

Tomer Omri
źródło
4

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

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

To działało dla mnie, gdy inni nie

Luke Robertson
źródło
3

musisz podać tutaj nazwę aplikacji, taką jak myapp

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

możesz to sprawdzić

pm2 list

możesz także dodać czas

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

możesz sprawdzić dzienniki według

pm2 log "id" lub pm2 log "appName"

aby uzyskać dzienniki dla wszystkich aplikacji

pm2 logs

Pharaj Ali
źródło
2

Nie zapomnij o spacji przed rozpoczęciem

pm2 start npm --[space]start

więc poprawne polecenie to:

pm2 start npm -- start
Vidura Adikari
źródło
1

Niestety wydaje się, że pm2 nie obsługuje dokładnie tej funkcjonalności, o którą prosiłeś https://github.com/Unitech/PM2/issues/1317 .

Alternatywą jest użycie ecosystem.jsonpliku Rozpoczęcie wdrażania, które może obejmować konfiguracje środowisk produkcyjnych i programistycznych. Nadal jednak służy npm startdo ładowania aplikacji.

snozza
źródło
Co przez to rozumiesz? However, this is still using npm start to bootstrap your app.Rzeczywiście można uruchomić npm startza pomocą pm2?
xpepermint,
1
pm2 start ./bin/www

może biegać

jeśli chcesz wdrożyć wiele serwerów, możesz to zrobić. zamiast pm2 start npm - start

劉 謹 賢
źródło
1

Aby uruchomić PM2 npm startmetodą i dać mu name, uruchom to,
pm2 start npm --name "your_app_name" -- start

Aby uruchomić go, przekazując dzienniki w formacie daty,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start

Anish Nair
źródło
0

Teraz możesz użyć po:

pm2 start npm -- start

Śledź https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319

Minh Dao
źródło
Czy potrafisz poszerzyć swoją odpowiedź? Porady, jak odpowiedzieć : Zalecane są linki do zasobów zewnętrznych, ale dodaj kontekst wokół linku, aby inni użytkownicy mieli pojęcie, co to jest i dlaczego. Zawsze podawaj najistotniejszą część ważnego linku, na wypadek gdyby strona docelowa była nieosiągalna lub została trwale wyłączona.
moodboom
0

Działa dobrze na CentOS 7

Wersja PM2 4.2.1

weźmy dwa scenariusze:

1. npm start //server.js

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

2. npm uruchom main //main.js

pm2 start "npm -- run main" --name myMainFile
M. Hamza Rajput
źródło