Pm2 può eseguire uno script 'npm start'


214

C'è un modo per pm2 di eseguire uno script di avvio npm o devi solo eseguire pm2 start app.js

Quindi in fase di sviluppo

npm start

Quindi in produzione con pm2 faresti funzionare qualcosa del genere

pm2 start 'npm start'

C'è un modo equivalente per farlo in forever:

forever start -c "npm start" ./

Si tratta di un'estensione per Risposta data dal Dhaval stackoverflow.com/a/37775318/4828326 1. Prima PM2 aggiungere al vostro package.json 2. Per la modalità di sviluppo, aggiornare il pacchetto di script JSON in questo modo: "PM2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna,

Risposte:


438

PM2 ora supporta l'avvio di npm:

pm2 start npm -- start

Per assegnare un nome al processo PM2, utilizzare l' --nameopzione:

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

5
Come si può impostare un nome per il processo quando si utilizza questo comando? Ho provato a usarlo --name "app"ma lo ha impostato su npm.
silverlight513

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

7
Qualcuno sa come impostare npm startnel file di processo?
mqchen

1
GRAZIE MILLE!
hkg328,

3
ah, penso di aver trovato la risposta alla mia domanda. Non è una cosa pm2 o npm, sembra essere un modo * nix per dire "Ho finito di dare opzioni di comando e voglio iniziare a passare argomenti": unix.stackexchange.com/questions/11376/…
Chris Schmitz

96

Coloro che utilizzano uno script di configurazione come un .jsonfile per eseguire il processo pm2 possono utilizzare npm starto qualsiasi altro script come questo:

my-app-pm2.json

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

Quindi semplicemente -

pm2 start my-app-pm2.json

Modifica : per gestire il caso d'uso quando si dispone di questo script di configurazione in una directory principale e si desidera avviare un'app nella sottodirectory, quindi utilizzare l' cwdattributo.

Supponendo che la nostra app sia nella sottodirectory nested-apprelativa a questo file di configurazione quindi -

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

Maggiori dettagli qui .


1
come funziona se voglio eseguire lo script start npm da una cartella principale?
Gianfranco P.

1
Potresti elaborare un po 'di più? Suppongo che stai chiedendo Come eseguire npm start dall'esterno della directory del progetto? .
Jyotman Singh,

Sto usando lo script di configurazione per eseguire app a più nodi che si trovano in sottocartelle. Il pacchetto.json con le startinformazioni sullo script è in uno di questi. Guarda questo riassunto : gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Quando corro questo non sa da dove npmdovrebbe scappare. Grazie
Gianfranco P.

3
@GianfrancoP. Puoi usare l' cwdattributo. Controlla la mia risposta modificata :)
Jyotman Singh

Ho provato a usare sudo npm e mostra un errore di accesso per creare una directory difficile Ho dato tutte le autorizzazioni per l'utente come root e ho anche eseguito il comando pm2 comesudo pm2 start config.json
Mr AJ

39

Sì. Usa pm2 start npm --no-automation --name {app name} -- run {script name}. Funziona. Il --no-automationflag è presente perché senza di esso PM2 non riavvierà l'app in caso di arresto anomalo.


1
Hai idea di come utilizzare questo flag all'interno del file di configurazione ecosystem.js?
Tom

1
AGGIORNAMENTO: Okay ho scoperto che è necessario specificare "automazione": false.
Tom

@twigg pm2 --help | grep 'no-autom'restituisce una riga per me nella versione 1.0.2
jcollum

27

Usare npm run

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


25

Ho scritto uno script di shell qui sotto (chiamato start.sh). Perché il mio package.jsonha prestartun'opzione. Quindi voglio correre npm start.

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

Quindi, inizia start.shentro pm2.

pm2 start start.sh --name appNameYouLike

Bello. Purtroppo questo non funziona quando si utilizza il startOrRestartcomando.
xpepermint,

@xpepermint basta usare il flag -f alla fine. Forza un inizio. (cioè si riavvierà se già avviato)
Zeeno

16

Sì, ora pm2 supporta npm start, --name per il nome dell'app della specie.

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

Questa è la risposta che mi ha davvero aiutato. Molte grazie.
Adesh Kumar,

9

Vedere per abilitare il clustering:

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

Cosa ne pensi?


cosa fa -i 0?
Johhan Santana,

1
Avvia i processi massimi in base alle CPU disponibili (modalità cluster)
jdnichollsc,

7

Se si utilizza PM2 tramite moduli di nodo anziché a livello globale, è necessario impostare interpreter: 'none'affinché le soluzioni sopra funzionino. Documenti correlati qui .

In ecosystem.config.js:

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

7

Avevo bisogno di eseguire uno script npm specifico sulla mia app in pm2 (per ogni ambiente) Nel mio caso, è stato quando ho creato un servizio di gestione temporanea / test

Il comando che ha funzionato per me (gli arg devono essere inoltrati in quel modo):

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

esempi:

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

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

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

Spero che abbia aiutato


4

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

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

Questo ha funzionato per me quando gli altri no


3

devi fornire qui il nome dell'app come myapp

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

puoi controllarlo da

pm2 list

puoi anche aggiungere tempo

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

puoi controllare i log di

pm2 log "id" o pm2 log "appName"

per ottenere i registri per tutte le app

pm2 logs


2

Non dimenticare lo spazio prima di iniziare

pm2 start npm --[space]start

quindi il comando corretto è:

pm2 start npm -- start

1

Sfortunatamente, sembra che pm2 non supporti l'esatta funzionalità richiesta https://github.com/Unitech/PM2/issues/1317 .

L'alternativa proposta è quella di utilizzare un ecosystem.jsonfile Introduzione alla distribuzione che potrebbe includere configurazioni per ambienti di produzione e sviluppo. Tuttavia, questo è ancora in uso npm startper avviare la tua app.


Cosa vuoi dire con questo? However, this is still using npm start to bootstrap your app.Puoi davvero correre npm startusando pm2?
xpepermint,

1
pm2 start ./bin/www

può correre

se vuoi distribuire più server puoi farlo. invece di pm2 start npm - start


1

Per eseguire PM2 con npm startmetodo e dargli un name, esegui questo,
pm2 start npm --name "your_app_name" -- start

Per eseguirlo passando il formato data per i registri,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

Ora puoi usare dopo:

pm2 start npm -- start

Segui da https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


Puoi espandere la tua risposta? Consigli da come rispondere : I collegamenti a risorse esterne sono incoraggiati, ma si prega di aggiungere un contesto attorno al collegamento in modo che gli altri utenti abbiano qualche idea di cosa sia e perché sia ​​lì. Cita sempre la parte più pertinente di un link importante, nel caso in cui il sito di destinazione non sia raggiungibile o rimanga permanentemente offline.
moodboom

0

Funziona bene su CentOS 7

PM2 versione 4.2.1

prendiamo due scenari:

1. npm start //server.js

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

2. npm esegue main //main.js

pm2 start "npm -- run main" --name myMainFile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.