Pm2 peut-il exécuter un script 'npm start'


215

Existe-t-il un moyen pour pm2 d'exécuter un script de démarrage npm ou devez-vous simplement exécuter pm2 start app.js

Donc en développement

npm start

Ensuite, en production avec pm2, vous exécuteriez quelque chose comme

pm2 start 'npm start'

Il existe une manière équivalente de le faire dans forever:

forever start -c "npm start" ./

Il s'agit de l'extension de Answer donnée par Dhaval stackoverflow.com/a/37775318/4828326 1. Ajoutez d'abord pm2 à votre package.json 2. Pour le mode de développement, mettez à jour le script json de votre package comme ceci: "pm2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Réponses:


439

PM2 prend désormais en charge le démarrage de npm:

pm2 start npm -- start

Pour attribuer un nom au processus PM2, utilisez l' --nameoption:

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

5
Comment pouvez-vous définir un nom pour le processus lorsque vous utilisez cette commande? J'ai essayé d'utiliser --name "app"mais il l'a juste mis à npm.
silverlight513

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

7
Quelqu'un sait comment définir npm startdans le fichier de processus?
mqchen

2
MERCI BEAUCOUP!
hkg328

3
ah, je pense avoir trouvé la réponse à ma question. Ce n'est pas une chose pm2 ou npm, cela semble être une façon * nix de dire "J'ai fini de donner des options de commande et je veux commencer à passer des arguments": unix.stackexchange.com/questions/11376/…
Chris Schmitz

96

Ceux qui utilisent un script de configuration comme un .jsonfichier pour exécuter le processus pm2 peuvent utiliser npm startou tout autre script comme celui-ci -

my-app-pm2.json

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

Alors simplement -

pm2 start my-app-pm2.json

Modifier - Pour gérer le cas d'utilisation lorsque vous avez ce script de configuration dans un répertoire parent et que vous souhaitez lancer une application dans le sous-répertoire, puis utilisez l' cwdattribut.

En supposant que notre application se trouve dans le sous-répertoire nested-apprelatif à ce fichier de configuration, alors -

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

Plus de détails ici .


1
comment cela fonctionne-t-il si je veux exécuter le script start npm à partir d'un dossier parent?
Gianfranco P.

1
Pourriez-vous nous en dire un peu plus? Je suppose que vous demandez comment exécuter npm start depuis l'extérieur du répertoire du projet? .
Jyotman Singh

J'utilise le script de configuration pour exécuter plusieurs applications de nœuds qui se trouvent dans des sous-dossiers. Le package.json avec les startinformations de script est dans l'un d'eux. Voir cet essentiel: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Lorsque j'exécute cela, il ne sait pas où npmdoit s'exécuter. Thx
Gianfranco P.

3
@GianfrancoP. Vous pouvez utiliser l' cwdattribut. Vérifiez ma réponse modifiée :)
Jyotman Singh

J'ai essayé d'utiliser sudo npm et cela montre une erreur d'accès pour créer un répertoire difficile.J'ai donné toutes les autorisations à l'utilisateur en tant que root et également en exécutant la commande pm2 en tant quesudo pm2 start config.json
Mr AJ

39

Oui. Utilisez pm2 start npm --no-automation --name {app name} -- run {script name}. Ça marche. Le --no-automationdrapeau est là car sans lui, PM2 ne redémarrera pas votre application lorsqu'elle se bloque.


1
Avez-vous une idée de comment utiliser cet indicateur à l'intérieur du fichier de configuration écosyst.js?
Tom

1
MISE À JOUR: D'accord, j'ai trouvé que vous devez spécifier "automation": false.
Tom

@twigg pm2 --help | grep 'no-autom'renvoie une ligne pour moi dans la version 1.0.2
jcollum

27

Utiliser npm run

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


25

J'ai écrit le script shell ci-dessous (nommé start.sh). Parce que mon package.jsona l' prestartoption. Je veux donc courir npm start.

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

Ensuite, commencez start.shpar pm2.

pm2 start start.sh --name appNameYouLike

C'est zonte. Malheureusement, cela ne fonctionne pas lors de l'utilisation de la startOrRestartcommande.
xpepermint

@xpepermint utilise simplement le drapeau -f à la fin. Cela force un début. (c'est-à-dire qu'il redémarrera s'il a déjà commencé)
Zeeno

16

Oui, nous pouvons maintenant, pm2 prend en charge le démarrage de npm, --name au nom de l'application de l'espèce.

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

C'est la réponse qui m'a vraiment aidé. Merci beaucoup.
Adesh Kumar

9

Voir pour activer le clustering:

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

Qu'est-ce que tu penses?


que fait- -i 0il?
Johhan Santana

1
Démarrer les processus maximum en fonction des CPU disponibles (mode cluster)
jdnichollsc

7

Si vous utilisez PM2 via des modules de nœuds plutôt que globalement, vous devrez configurer interpreter: 'none'pour que les solutions ci-dessus fonctionnent. Documents connexes ici .

Dans ecosystem.config.js:

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

7

J'avais besoin d'exécuter un script npm spécifique sur mon application en pm2 (pour chaque env) Dans mon cas, c'était lorsque j'ai créé un service de test / test

La commande qui a fonctionné pour moi (les arguments doivent être transmis de cette façon):

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

exemples:

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

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

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

J'espère que cela a aidé


4

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

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

Cela a fonctionné pour moi quand les autres ne l'ont pas fait


3

vous devez fournir ici le nom de l'application comme myapp

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

vous pouvez le vérifier par

pm2 list

vous pouvez également ajouter du temps

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

vous pouvez consulter les journaux par

pm2 log "id" ou pm2 log "appName"

pour obtenir des journaux pour toutes les applications

pm2 logs


2

N'oubliez pas l'espace avant de commencer

pm2 start npm --[space]start

donc la commande correcte est:

pm2 start npm -- start

1

Malheureusement, il semble que pm2 ne prenne pas en charge la fonctionnalité exacte que vous avez demandée https://github.com/Unitech/PM2/issues/1317 .

L'alternative proposée est d'utiliser un ecosystem.jsonfichier Mise en route du déploiement qui pourrait inclure des configurations pour les environnements de production et de développement. Cependant, ceci est toujours utilisé npm startpour amorcer votre application.


Que veux-tu dire par là? However, this is still using npm start to bootstrap your app.Pouvez-vous réellement exécuter en npm startutilisant pm2?
xpepermint

1
pm2 start ./bin/www

peut courir

si vous voulez déployer plusieurs serveurs, vous pouvez le faire. au lieu de pm2 start npm - start


1

Pour exécuter PM2 avec la npm startméthode et lui donner un name, exécutez ceci,
pm2 start npm --name "your_app_name" -- start

Pour l'exécuter en passant le format de date pour les journaux,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

Maintenant, vous pouvez utiliser après:

pm2 start npm -- start

Suivez par https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


Pouvez-vous développer votre réponse? Conseils de Comment répondre : Les liens vers des ressources externes sont encouragés, mais veuillez ajouter du contexte autour du lien afin que vos collègues utilisateurs aient une idée de ce que c'est et pourquoi il est là. Citez toujours la partie la plus pertinente d'un lien important, au cas où le site cible serait inaccessible ou se déconnecterait définitivement.
moodboom

0

Ça marche bien sur CentOS 7

PM2 version 4.2.1

prenons deux scénarios:

1. npm start //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.