Kann pm2 ein 'npm start'-Skript ausführen?


212

Gibt es eine Möglichkeit für pm2, ein npm-Startskript auszuführen, oder müssen Sie nur ausführen pm2 start app.js

Also in der Entwicklung

npm start

Dann würden Sie in der Produktion mit pm2 so etwas ausführen

pm2 start 'npm start'

Es gibt eine äquivalente Möglichkeit, dies zu tun forever:

forever start -c "npm start" ./

Dies ist eine Erweiterung der Antwort von Dhaval stackoverflow.com/a/37775318/4828326 1. Fügen Sie zuerst pm2 zu package.json hinzu. 2. Aktualisieren Sie für den Entwicklungsmodus Ihr Paket json script wie folgt: "pm2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Antworten:


436

PM2 unterstützt jetzt npm start:

pm2 start npm -- start

Verwenden Sie die folgende --nameOption, um dem PM2-Prozess einen Namen zuzuweisen :

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

5
Wie können Sie mit diesem Befehl einen Namen für den Prozess festlegen? Ich habe es versucht, --name "app"aber es hat es einfach auf npm gesetzt.
silverlight513

171
pm2 start npm --name "Your APP Name" - start
Laukik Patel

7
Weiß jemand, wie man npm startin der Prozessdatei setzt?
Mqchen

1
ICH DANKE DIR SEHR!
hkg328

3
Ah, ich glaube ich habe die Antwort auf meine Frage gefunden. Es ist keine pm2- oder npm-Sache, es scheint eine * nix-Art zu sein, zu sagen: "Ich bin mit dem Geben von Befehlsoptionen
Chris Schmitz

96

Diejenigen, die ein Konfigurationsskript wie eine .jsonDatei verwenden, um den pm2-Prozess auszuführen, können npm startein anderes Skript wie dieses verwenden -

my-app-pm2.json

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

Dann einfach -

pm2 start my-app-pm2.json

Bearbeiten - Um den Anwendungsfall zu behandeln, wenn Sie dieses Konfigurationsskript in einem übergeordneten Verzeichnis haben und eine App im Unterverzeichnis starten möchten, verwenden Sie das cwdAttribut.

Angenommen, unsere App befindet sich im Unterverzeichnis nested-app relativ zu dieser Konfigurationsdatei, dann -

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

Mehr Details hier .


1
Wie funktioniert das, wenn ich das Start-npm-Skript in einem übergeordneten Ordner ausführen möchte?
Gianfranco P.

1
Könnten Sie etwas näher darauf eingehen? Ich nehme an, Sie fragen, wie npm start von außerhalb des Projektverzeichnisses ausgeführt werden soll. .
Jyotman Singh

Ich verwende das Konfigurationsskript, um mehrere Knoten-Apps auszuführen, die sich in Unterordnern befinden. Die package.json mit den Skriptinformationen startbefindet sich in einer davon. Siehe diesen Kern: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Wenn ich dies ausführe, weiß es nicht, woher npmes laufen soll. Thx
Gianfranco P.

3
@GianfrancoP. Sie können das cwdAttribut verwenden. Überprüfen Sie meine bearbeitete Antwort :)
Jyotman Singh

Ich habe versucht, sudo npm zu verwenden, und es zeigt einen Zugriffsfehler an, um ein hartes Verzeichnis zu erstellen. Ich habe dem Benutzer alle Berechtigungen als root erteilt und auch den Befehl pm2 alssudo pm2 start config.json
Mr AJ

39

Ja. Verwenden Sie pm2 start npm --no-automation --name {app name} -- run {script name}. Es klappt. Das --no-automationFlag ist vorhanden, da PM2 ohne das Flag Ihre App nicht neu startet, wenn es abstürzt.


1
Haben Sie eine Idee, wie Sie dieses Flag in der Konfigurationsdateiosystem.js verwenden können?
Tom

1
UPDATE: Okay, ich habe festgestellt, dass Sie "Automatisierung" angeben müssen: false.
Tom

@ Twigg pm2 --help | grep 'no-autom'gibt eine Zeile für mich in Version 1.0.2
jcollum

26

Benutzen npm run

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


25

Ich habe unten ein Shell-Skript geschrieben (benannt start.sh). Weil meine package.jsonhat prestartOption. Also will ich rennen npm start.

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

Beginnen Sie dann start.shmit pm2.

pm2 start start.sh --name appNameYouLike

Das ist schön. Leider funktioniert dies bei Verwendung des startOrRestartBefehls nicht.
Xpepermint

@xpepermint benutze einfach das Flag -f am Ende. Es erzwingt einen Start. (dh es wird neu gestartet, wenn bereits gestartet)
Zeeno

16

Ja, wir können, jetzt unterstützt pm2 npm start, --name to species app name.

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

Dies ist die Antwort, die mir wirklich geholfen hat. Vielen Dank.
Adesh Kumar

9

Siehe So aktivieren Sie das Clustering:

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

Was denken Sie?


Was bedeutet das -i 0tun?
Johhan Santana

1
Starten Sie maximale Prozesse abhängig von den verfügbaren CPUs (Cluster-Modus)
jdnichollsc

7

Ich musste in pm2 ein bestimmtes npm-Skript in meiner App ausführen (für jede Umgebung). In meinem Fall habe ich einen Staging- / Testdienst erstellt

Der Befehl, der für mich funktioniert hat (die Argumente müssen auf diese Weise weitergeleitet werden):

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

Beispiele:

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

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

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

Hoffe es hat geholfen


6

Wenn Sie PM2 nicht global, sondern über Knotenmodule verwenden, müssen Sie festlegen interpreter: 'none', dass die oben genannten Lösungen funktionieren. Verwandte Dokumente hier .

In ecosystem.config.js:

  apps: [
    {
      name: 'myApp',
      script: 'yarn',
      args: 'start',
      interpreter: 'none',
    },
  ],

4

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

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

Das hat bei mir funktioniert, als die anderen es nicht taten


3

Sie müssen hier einen App-Namen wie myapp angeben

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

Sie können es überprüfen durch

pm2 list

Sie können auch Zeit hinzufügen

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

Sie können Protokolle überprüfen von

pm2 log "id" oder pm2 log "appName"

um Protokolle für alle App zu erhalten

pm2 logs


2

Vergessen Sie nicht den Platz vor dem Start

pm2 start npm --[space]start

Der richtige Befehl lautet also:

pm2 start npm -- start

1

Leider scheint pm2 nicht die genaue Funktionalität zu unterstützen, die Sie angefordert haben: https://github.com/Unitech/PM2/issues/1317 .

Die vorgeschlagene Alternative besteht darin, eine ecosystem.jsonDatei zu verwenden. Erste Schritte mit der Bereitstellung, die Setups für Produktions- und Entwicklungsumgebungen enthalten kann. Dies wird jedoch weiterhin npm startzum Booten Ihrer App verwendet.


Was meinst du damit? However, this is still using npm start to bootstrap your app.Können Sie tatsächlich laufen npm startmit pm2?
Xpepermint

1
pm2 start ./bin/www

kann laufen

Wenn Sie mehrere Server bereitstellen möchten, können Sie dies tun. statt pm2 start npm - start


1

Um PM2 mit der npm startMethode auszuführen und ihr eine zu geben name, führen Sie Folgendes aus:
pm2 start npm --name "your_app_name" -- start

Um es auszuführen, indem Sie das Datumsformat für Protokolle übergeben,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

Jetzt können Sie nach verwenden:

pm2 start npm -- start

Folgen Sie https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


Können Sie Ihre Antwort erweitern? Hinweise zur Beantwortung : Links zu externen Ressourcen werden empfohlen. Fügen Sie jedoch einen Kontext um den Link hinzu, damit Ihre Mitbenutzer eine Vorstellung davon haben, was es ist und warum es dort ist. Zitieren Sie immer den relevantesten Teil eines wichtigen Links, falls die Zielwebsite nicht erreichbar ist oder dauerhaft offline geht.
Moodboom

0

Unter CentOS 7 funktioniert es einwandfrei

PM2 Version 4.2.1

Nehmen wir zwei Szenarien:

1. npm start //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.