pm2가 'npm start'스크립트를 실행할 수 있습니까


212

pm2가 npm 시작 스크립트를 실행하는 방법이 있습니까 아니면 그냥 실행해야합니까? pm2 start app.js

그래서 개발에서

npm start

그런 다음 pm2를 사용한 프로덕션에서는 다음과 같은 것을 실행합니다.

pm2 start 'npm start'

이 작업을 수행하는 동등한 방법이 있습니다 forever.

forever start -c "npm start" ./

이것은 Dhaval stackoverflow.com/a/37775318/4828326에서 제공하는 Answer의 확장입니다 . 1. 먼저 pm2를 package.json에 추가하십시오. 2. 개발 모드의 경우 다음과 같이 패키지 json 스크립트를 업데이트하십시오. "pm2 : dev": "node_modules / pm2 / bin / pm2-dev start npm-start ",
Rama Krishna

답변:


436

PM2는 이제 npm start를 지원합니다.

pm2 start npm -- start

PM2 프로세스에 이름을 지정하려면 다음 --name옵션을 사용하십시오 .

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

5
이 명령을 사용할 때 프로세스 이름을 어떻게 설정할 수 있습니까? 나는 사용하려고 --name "app"했지만 그냥 npm으로 설정했다.
silverlight513

171
PM2 시작 NPM --name "앱 이름"- 시작
Laukik 파텔

7
npm start프로세스 파일에서 설정하는 방법을 아는 사람이 있습니까?
mqchen

1
정말 고맙습니다!
hkg328

3
아, 내 질문에 대한 답을 찾았습니다. pm2 또는 npm이 아닌 "명령 옵션을 제공하고 인수 전달을 시작하고 싶다"고 말하는 * nix 방식 인 것 같습니다 : unix.stackexchange.com/questions/11376/…
Chris Schmitz

96

.jsonpm2 프로세스를 실행하기 위해 파일 과 같은 구성 스크립트를 사용하는 사람들은 이와 같은 npm start다른 스크립트를 사용할 수 있습니다 -

my-app-pm2.json

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

그런 다음 간단히

pm2 start my-app-pm2.json

편집 -상위 디렉토리에이 구성 스크립트가 있고 서브 디렉토리에서 앱을 시작하려는 경우 유스 케이스를 처리하려면 cwd속성 을 사용하십시오 .

nested-app이이 구성 파일과 관련된 하위 디렉토리에 있다고 가정하면 -

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

자세한 내용은 여기를 참조하십시오 .


1
부모 폴더에서 start npm 스크립트를 실행하려는 경우 어떻게 작동합니까?
Gianfranco P.

1
좀 더 자세히 설명해 주시겠습니까? 프로젝트 디렉토리 외부에서 npm start 를 실행하는 방법을 묻는다고 가정 합니까? .
Jyotman Singh

구성 스크립트를 사용하여 하위 폴더에있는 여러 노드 앱을 실행하고 있습니다. start스크립트 정보가있는 package.json이 그 중 하나에 있습니다. 이 요점을 참조하십시오 : gist.github.com/gianpaj/04c5680a8275616aac5e46374e07f673 이것을 실행할 때 어디에서 npm실행 해야하는지 알 수 없습니다 . Thx
Gianfranco P.

3
G cwd속성을 사용할 수 있습니다 . 내 편집 된 답변 확인 :)
Jyotman Singh

나는 sudo는 NPM을 사용하려고 그리고 내가 루트로 사용자에게 모든 권한을 부여하고 또한 실행 PM2 명령과 한 힘든 디렉토리를 만들 액세스 오류가 표시됩니다sudo pm2 start config.json
미스터 AJ

39

예. 사용하십시오 pm2 start npm --no-automation --name {app name} -- run {script name}. 효과가있다. --no-automation플래그가 이 충돌 할 때 PM2 앱을 다시 시작하지 않습니다 그것을하지 않고 있기 때문이다.


1
생태계 .js 구성 파일 내에서이 플래그를 사용하는 방법을 알고 있습니까?
Tom

1
업데이트 : "automation"을 지정해야한다는 것을 알았습니다. 거짓.
Tom

@twigg pm2 --help | grep 'no-autom'는 버전 1.0.2에서 한 줄을 반환합니다.
jcollum


25

아래에 셸 스크립트를 작성했습니다 ( start.sh). 내 옵션 package.json이 있기 때문에 prestart. 그래서 나는 달리고 싶다 npm start.

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

그런 다음 start.shpm2 부터 시작하십시오 .

pm2 start start.sh --name appNameYouLike

좋습니다. 불행히도 이것은 startOrRestart명령을 사용할 때 작동하지 않습니다 .
xpepermint

@xpepermint는 끝에 -f 플래그를 사용합니다. 시작을 강요합니다. (즉, 이미 시작된 경우 다시 시작됩니다)
Zeeno

16

그렇습니다. 이제 pm2는 npm start, --name to species 앱 이름을 지원합니다.

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

이것이 실제로 도움이 된 답변입니다. 고마워
Adesh Kumar

9

클러스터링 활성화를 참조하십시오.

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

어떻게 생각해?


무엇을 -i 0합니까?
Johhan Santana 2016 년

1
사용 가능한 CPU에 따라 최대 프로세스 시작 (클러스터 모드)
jdnichollsc

7

전역이 아닌 노드 모듈을 통해 PM2를 사용하는 경우 interpreter: 'none'위의 솔루션이 작동 하도록 설정해야합니다 . 관련 문서는 여기에 있습니다 .

에서 ecosystem.config.js:

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

7

PM2의 앱에서 특정 npm 스크립트를 실행해야했습니다 (각 env마다) 내 경우에는 준비 / 테스트 서비스를 만들 때였습니다

나를 위해 일한 명령 (args는 그런 식으로 전달되어야 함) :

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

예 :

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

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

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

그것이 도움이 되었기를 바랍니다


4

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

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

다른 사람들이하지 않았을 때 이것은 나를 위해 일했습니다.


3

여기에 myapp처럼 앱 이름을 제공해야합니다.

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

당신은 그것을 확인할 수 있습니다

pm2 list

당신은 또한 시간을 추가 할 수 있습니다

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

당신은 로그를 확인할 수 있습니다

pm2 log "id" 또는 pm2 log "appName"

모든 앱에 대한 로그를 얻으려면

pm2 logs


2

시작하기 전에 공간을 잊지 마세요

pm2 start npm --[space]start

올바른 명령은 다음과 같습니다.

pm2 start npm -- start

1

불행히도 pm2는 https://github.com/Unitech/PM2/issues/1317 요청한 정확한 기능을 지원하지 않는 것 같습니다 .

제안 된 대안은 프로덕션 및 개발 환경에 대한 설정을 포함 할 수 있는 배포 시작하기ecosystem.json 파일 을 사용하는 것입니다. 그러나 여전히 앱을 부트 스트랩 하는 데 사용 하고 있습니다.npm start


그게 무슨 뜻 이니? However, this is still using npm start to bootstrap your app.실제로 다음을 npm start사용하여 실행할 수 있습니까 pm2?
xpepermint

1
pm2 start ./bin/www

달릴 수있다

여러 서버 배포를 원한다면 그렇게 할 수 있습니다. pm2 대신에 npm-start


1

npm start메소드를 사용하여 PM2를 실행 하고에 제공 하려면 다음을 name실행하십시오.
pm2 start npm --name "your_app_name" -- start

로그에 날짜 형식을 전달하여 실행하려면
pm2 start npm --name "your_name" --log-date-format 'DD-MM HH:mm:ss.SSS' -- start


0

이제 다음을 사용할 수 있습니다.

pm2 start npm -- start

다음에 https://github.com/Unitech/pm2/issues/1317#issuecomment-220955319


답을 넓힐 수 있습니까? 답변 방법에 대한 조언 : 외부 리소스 에 대한 링크를 권장하지만 링크 주위에 컨텍스트를 추가하여 동료 사용자가 그 정보와 그 이유를 알 수 있도록하십시오. 대상 사이트에 도달 할 수 없거나 영구적으로 오프라인 상태가되는 경우 항상 중요한 링크의 가장 관련성있는 부분을 인용하십시오.
moodboom

0

CentOS 7에서 제대로 작동합니다

PM2 버전 4.2.1

두 가지 시나리오를 봅시다 :

1. npm start //server.js

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

2. npm run main //main.js

pm2 start "npm -- run main" --name myMainFile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.