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" ./

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

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 .


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.


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}


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

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

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?


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',
    },
  ],

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


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


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


2

Nie zapomnij o spacji przed rozpoczęciem

pm2 start npm --[space]start

więc poprawne polecenie to:

pm2 start npm -- start

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.


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


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


0

Teraz możesz użyć po:

pm2 start npm -- start

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.