¿Puede pm2 ejecutar un script 'npm start'?

214

¿Hay alguna manera para que pm2 ejecute un script de inicio npm o solo tiene que ejecutar pm2 start app.js

Entonces en desarrollo

npm start

Luego, en producción con pm2, ejecutarías algo como

pm2 start 'npm start'

Hay una forma equivalente de hacer esto en forever:

forever start -c "npm start" ./
svnm
fuente
Esta es una extensión de la Respuesta dada por Dhaval stackoverflow.com/a/37775318/4828326 1. Primero agregue pm2 a su package.json 2. Para el modo de desarrollo, actualice su script json del paquete de esta manera: "pm2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Respuestas:

438

PM2 ahora es compatible con npm start:

pm2 start npm -- start

Para asignar un nombre al proceso PM2, use la --nameopción:

pm2 start npm --name "app name" -- start
Dhaval Chauhan
fuente
55
¿Cómo se puede establecer un nombre para el proceso cuando se usa este comando? Intenté usarlo --name "app"pero solo lo configuró en npm.
silverlight513
171
pm2 start npm --name "Your APP Name" - start
Laukik Patel
77
Alguien sabe cómo configurar npm starten el archivo de proceso?
mqchen
1
¡MUCHAS GRACIAS!
hkg328
3
Ah, creo que encontré la respuesta a mi pregunta. No es una cuestión de pm2 o npm, parece ser una forma * nix de decir "Ya terminé de
Chris Schmitz
96

Aquellos que usan un script de configuración como un .jsonarchivo para ejecutar el proceso pm2 pueden usar npm starto cualquier otro script como este:

my-app-pm2.json

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

Entonces simplemente -

pm2 start my-app-pm2.json

Editar : para manejar el caso de uso cuando tiene este script de configuración en un directorio principal y desea iniciar una aplicación en el subdirectorio, use el cwdatributo.

Suponiendo que nuestra aplicación esté en el subdirectorio nested-apprelativo a este archivo de configuración, entonces:

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

Más detalles aquí .

Jyotman Singh
fuente
1
¿Cómo funciona esto si quiero ejecutar el script de inicio npm desde una carpeta principal?
Gianfranco P.
1
¿Podrías elaborar un poco más? Supongo que estás preguntando ¿Cómo ejecutar npm start desde fuera del directorio del proyecto? .
Jyotman Singh
Estoy usando el script de configuración para ejecutar aplicaciones de múltiples nodos que están en subcarpetas. El package.json con la startinformación del script está en uno de ellos. Vea esta esencia: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Cuando ejecuto esto, no sabe de dónde npmdebe ejecutarse. Thx
Gianfranco P.
3
@GianfrancoP. Puedes usar el cwdatributo. Comprueba mi respuesta editada :)
Jyotman Singh
Traté de usar sudo npm y muestra un error de acceso para crear un directorio difícil. He dado todo el permiso al usuario como root y también ejecuto el comando pm2 comosudo pm2 start config.json
Sr. AJ
39

Si. Uso pm2 start npm --no-automation --name {app name} -- run {script name}. Funciona. La --no-automationbandera está ahí porque sin ella PM2 no reiniciará su aplicación cuando se bloquee.

jcollum
fuente
1
¿Tiene alguna idea de cómo usar esta bandera dentro del archivo de configuración de ecosistema.js?
Tom
1
ACTUALIZACIÓN: Bien, encontré que necesita especificar "automatización": falso.
Tom
@twigg me pm2 --help | grep 'no-autom'devuelve una línea en la versión 1.0.2
jcollum
27

Usar npm run

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

carkod
fuente
25

Escribí el script de shell a continuación (llamado start.sh). Porque mi package.jsontiene prestartopción. Entonces quiero correr npm start.

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

Luego, comience start.sha las 2 p.m.

pm2 start start.sh --name appNameYouLike
peccu
fuente
Eso es bueno. Desafortunadamente, esto no funciona cuando se usa el startOrRestartcomando.
xpepermint
@xpepermint solo usa la bandera -f al final. Fuerza un comienzo. (es decir, se reiniciará si ya comenzó)
Zeeno
16

Sí, ahora pm2 admite npm start, --name para el nombre de la aplicación de especie

pm2 start npm --name "app" -- start
KARTHIKEYAN.A
fuente
Esta es la respuesta que realmente me ayudó. Muchas gracias.
Adesh Kumar
9

Consulte para habilitar la agrupación:

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

¿Qué piensas?

jdnichollsc
fuente
lo que hace el -i 0hacer?
Johhan Santana
1
Iniciar procesos máximos dependiendo de las CPU disponibles (modo de clúster)
jdnichollsc
7

Si usa PM2 a través de módulos de nodo en lugar de globalmente, deberá configurarlo interpreter: 'none'para que las soluciones anteriores funcionen. Documentos relacionados aquí .

En ecosystem.config.js:

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

Necesitaba ejecutar un script npm específico en mi aplicación en pm2 (para cada env) En mi caso, fue cuando creé un servicio de ensayo / ensayo

El comando que funcionó para mí (los argumentos deben reenviarse de esa manera):

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

ejemplos:

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

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

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

Espero que haya ayudado

Tomer Omri
fuente
4

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

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

Esto funcionó para mí cuando los demás no

Luke Robertson
fuente
3

debe proporcionar el nombre de la aplicación aquí, como myapp

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

puedes verificarlo por

pm2 list

también puedes agregar tiempo

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

puedes revisar los registros por

pm2 log "id" o pm2 log "appName"

para obtener registros para todas las aplicaciones

pm2 logs

Pharaj Ali
fuente
2

No olvides el espacio antes de comenzar

pm2 start npm --[space]start

entonces el comando correcto es:

pm2 start npm -- start
Vidura Adikari
fuente
1

Desafortunadamente, parece que pm2 no admite la funcionalidad exacta que solicitó https://github.com/Unitech/PM2/issues/1317 .

La alternativa propuesta es utilizar un ecosystem.jsonarchivo Introducción a la implementación que podría incluir configuraciones para entornos de producción y desarrollo. Sin embargo, esto todavía se está utilizando npm startpara arrancar su aplicación.

snozza
fuente
¿Qué quieres decir con eso? However, this is still using npm start to bootstrap your app.¿Realmente puedes correr npm startusando pm2?
xpepermint
1
pm2 start ./bin/www

puede correr

si desea implementar varios servidores, puede hacerlo. en lugar de pm2 start npm - start

劉 謹 賢
fuente
1

Para ejecutar PM2 con npm startmétodo y para darle un name, ejecuta esto,
pm2 start npm --name "your_app_name" -- start

Para ejecutarlo pasando formato de fecha para registros,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start

Anish Nair
fuente
0

Ahora, puede usar después de:

pm2 start npm -- start

Siga por https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319

Minh Dao
fuente
¿Puedes ampliar tu respuesta? Consejos de Cómo responder : se alientan los enlaces a recursos externos, pero agregue contexto alrededor del enlace para que sus otros usuarios tengan una idea de qué es y por qué está allí. Siempre cite la parte más relevante de un enlace importante, en caso de que no se pueda acceder al sitio de destino o se desconecte permanentemente.
moodboom
0

Funciona bien en CentOS 7

PM2 versión 4.2.1

tomemos dos escenarios:

1. inicio de la NGP //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
M. Hamza Rajput
fuente