2017-03-27 8 views
12
PM2 구성이 있습니다

, /home/foo/someconfig.json병합은/네임 스페이스 지정 PM2는

{ 
    "apps": [ 
     { 
      "name": "foo-main", 
      "script": "./index.js", 
     }, 
     { 
      "name": "foo-bar", 
      "script": "./bar.js" 
     }, 
     { 
      "name": "foo-baz", 
      "script": "./baz.js" 
     } 
    ] 
} 

나는 현재 이름 공간에서 모든 앱을 참조 할 대부분의 시간, 예를 들어, 애플 리케이션 응용 프로그램은 Windows에서 실행할 수 있기 때문에 대신

pm2 restart foo-main foo-bar foo-baz 

배쉬 중괄호 확장을하는

pm2 restart foo 

는 사용할 수 없습니다.

Doing pm2 restart /home/foo/someconfig.json은 설정 파일 경로를 파악하는 데 시간이 걸리기 때문에 좋지 않습니다. 프로젝트마다 다를 수 있으며 위치를 변경할 수도 있습니다.

개의 앱을 foo 앱으로 병합하거나 다른 합리적인 방법으로 모두 참조 할 수 있습니까?

답변

6

pm2 자체는 와일드 카드 기반 다시 시작을 지원하지 않지만, pm2 programmatic API을 사용하여 간단한 스크립트를 만드는 것은 복잡하지는 않습니다. 여기

아이디어 보여주는 작업 스크립트입니다 :이 명령 줄 인수로 foo을 통과 할 필요가있다,

var pm2 = require('pm2'); 

pm2.connect(function(err) { 
    if (err) { 
    console.error(err); 
    process.exit(2); 
    } 

    pm2.list(function(err, processDescriptionList) { 
    if (err) throw err; 
    for (var idx in processDescriptionList) { 
     var name = processDescriptionList[idx]['name']; 
     console.log(name); 
     if (name.startsWith('foo')) { 
     pm2.restart(name, function(err, proc) { 
      if (err) throw err; 
      console.log('Restarted: '); 
      console.log(proc); 
     }); 
     } 
    } 
    }); 
}); 

가 완전히 작동하도록하려면을 (지금은 하드 코드) 종료를 처리 (이제는 작동하지만 끝나면 종료하지 않습니다).

작은 샘플 앱과 설정을 포함하여 여기에 full code example입니다.

+0

감사합니다. pm2 API를 사용하는 것이 좋습니다. 불필요한 번거 로움이없는 글로벌'pm2' 명령이 그 이점을 가지고 있기 때문에 이것을하는 전통적인 방법이 있었으면합니다. – estus