O pm2 pode executar um script 'npm start'


214

Existe uma maneira de o pm2 executar um script de inicialização do npm ou você apenas precisa executar pm2 start app.js

Então, no desenvolvimento

npm start

Em produção com pm2, você executaria algo como

pm2 start 'npm start'

Existe uma maneira equivalente de fazer isso em forever:

forever start -c "npm start" ./

Esta é a extensão para a resposta dada por Dhaval stackoverflow.com/a/37775318/4828326 1. Primeiro adicione pm2 ao seu package.json 2. No modo de desenvolvimento, atualize o script json do pacote da seguinte maneira: "pm2: dev": "node_modules / pm2 / bin / pm2-dev start npm - start ",
Rama Krishna

Respostas:


438

O PM2 agora suporta npm start:

pm2 start npm -- start

Para atribuir um nome ao processo PM2, use a --nameopção:

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

5
Como você pode definir um nome para o processo ao usar este comando? Eu tentei usar, --name "app"mas apenas defini-lo como npm.
precisa

171
pm2 start npm --name "Nome do seu aplicativo" - start
Laukik Patel 4/16/16

7
Alguém sabe como definir npm startno arquivo de processo?
Mqchen

1
MUITO OBRIGADO!
hkg328

3
ah, acho que encontrei a resposta para minha pergunta. Não é uma coisa pm2 ou npm, parece ser uma maneira * nix de dizer "Eu terminei de dar opções de comando e quero começar a passar argumentos": unix.stackexchange.com/questions/11376/…
Chris Schmitz

96

Aqueles que estão usando um script de configuração como um .jsonarquivo para executar o processo pm2 podem usar npm startou qualquer outro script como este -

my-app-pm2.json

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

Então simplesmente -

pm2 start my-app-pm2.json

Editar - Para lidar com o caso de uso em que você possui esse script de configuração em um diretório pai e deseja iniciar um aplicativo no subdiretório, use o cwdatributo

Supondo que nosso aplicativo esteja no subdiretório nested-apprelativo a esse arquivo de configuração, então -

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

Mais detalhes aqui .


1
como isso funciona se eu quiser executar o script start npm a partir de uma pasta pai?
Gianfranco P.

1
Você poderia elaborar um pouco mais? Suponho que você esteja perguntando Como executar o npm start de fora do diretório do projeto? .
JYOTMAN Singh #

Estou usando o script de configuração para executar vários aplicativos de nó que estão em subpastas. O package.json com as startinformações do script está em um deles. Veja esta lista: gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 Quando executo isso, ele não sabe de onde npmdeve correr. Thx
Gianfranco P.

3
@GianfrancoP. Você pode usar o cwdatributo Verifique a minha resposta editada :)
Jyotman Singh

Eu tentei usar o sudo npm e ele mostra um erro de acesso para criar um diretório resistente. Eu dei toda a permissão para o usuário como root e também executando o comando pm2 comosudo pm2 start config.json
Mr AJ

39

Sim. Use pm2 start npm --no-automation --name {app name} -- run {script name}. Funciona. A --no-automationbandeira está lá porque, sem ela, o PM2 não reiniciará seu aplicativo quando ele falhar.


1
Você tem alguma idéia de como usar esse sinalizador dentro do arquivo de configuração ecosistema.js?
Tom

1
UPDATE: Ok, achei que você precisava especificar "automação": false.
Tom

@twigg pm2 --help | grep 'no-autom'retorna uma linha para mim na versão 1.0.2
jcollum 17/03

27

Usar npm run

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


25

Eu escrevi o shell script abaixo (nomeado start.sh). Porque meu package.jsontem prestartopção. Então eu quero correr npm start.

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

Então comece start.shpor pm2.

pm2 start start.sh --name appNameYouLike

Isso é bom. Infelizmente isso não funciona ao usar o startOrRestartcomando
Xpepermint 26/09/2015

@xpepermint basta usar a bandeira -f no final. Isso força um começo. (ou seja, ele vai reiniciar se já iniciado)
zeeno

16

Sim, podemos, agora o pm2 suporta o npm start, --name para o nome do aplicativo da espécie.

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

Esta é a resposta que realmente me ajudou. Muito obrigado.
Adesh Kumar 23/07/19

9

Consulte para ativar o cluster:

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

O que você acha?


o que -i 0faz?
Johhan Santana

1
Iniciar processos máximas dependendo CPUs disponíveis (modo de cluster)
jdnichollsc

7

Se você usar o PM2 por meio de módulos de nó em vez de globalmente, precisará definir interpreter: 'none'para que as soluções acima funcionem. Documentos relacionados aqui .

Em ecosystem.config.js:

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

7

Eu precisava executar um script npm específico no meu aplicativo no pm2 (para cada ambiente). No meu caso, foi quando eu criei um serviço de teste / teste

O comando que funcionou para mim (os argumentos devem ser encaminhados dessa maneira):

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

exemplos:

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 tenha ajudado


4

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

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

Isso funcionou para mim quando os outros não


3

você precisa fornecer o nome do aplicativo aqui, como myapp

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

você pode ver

pm2 list

você também pode adicionar tempo

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

você pode verificar os logs

pm2 log "id" ou pm2 log "appName"

obter logs para todos os aplicativos

pm2 logs


2

Não esqueça o espaço antes de começar

pm2 start npm --[space]start

então o comando correto é:

pm2 start npm -- start

1

Infelizmente, parece que o pm2 não suporta a funcionalidade exata que você solicitou https://github.com/Unitech/PM2/issues/1317 .

A alternativa proposta é usar um ecosystem.jsonarquivo Introdução à implantação, que pode incluir configurações para ambientes de produção e desenvolvimento. No entanto, isso ainda está sendo usado npm startpara inicializar seu aplicativo.


O que você quer dizer com isso? However, this is still using npm start to bootstrap your app.Você pode realmente correr npm startusando pm2?
Xpepermint # 26/15

1
pm2 start ./bin/www

pode correr

se você quiser implantar vários servidores, poderá fazer isso. em vez de pm2 start npm - start


1

Para executar o PM2 com o npm startmétodo e obter um name, execute isto,
pm2 start npm --name "your_app_name" -- start

Para executá-lo passando o formato de data para os logs,
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

Agora, você pode usar depois:

pm2 start npm -- start

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


Você pode expandir sua resposta? Conselho de Como responder : Os links para recursos externos são incentivados, mas adicione contexto ao redor do link para que seus colegas usuários tenham uma idéia do que é e por que está lá. Sempre cite a parte mais relevante de um link importante, caso o site de destino esteja inacessível ou fique permanentemente offline.
Moodboom 25/03

0

Está funcionando bem no CentOS 7

PM2 versão 4.2.1

vamos dar dois cenários:

1. npm start //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.