IT박스

pm2를 사용하여 앱에 인수를 전달하는 방법은 무엇입니까?

itboxs 2020. 12. 3. 07:40
반응형

pm2를 사용하여 앱에 인수를 전달하는 방법은 무엇입니까?


pm2를 사용하여 내 앱을 시작하고 있지만 인수를 전달할 수 없습니다. 내가 사용하는 명령은 pm2 start app.js-dev입니다. 이것은 영원히 작동하지만.


이 티켓에 명시된대로 할 수 있습니다 : https://github.com/Unitech/pm2/issues/13

환경을 전달하는 경우 환경 변수 활용을 고려할 수 있습니다. 이를 통해 해당 환경의 모든 프로세스에서 액세스 할 수있는 변수를 만듭니다 process.env.*.

따라서 구성 파일이 있습니다 config.json.

{
   "dev": {
        "db": {
            "hosts":["localhost"],
            "database": "api"
        },
        "redis": {
            "hosts": ["localhost"]
        }
   },
   "staging": {
        "db": {
            "hosts":["1.1.1.1"],
            "database": "api"
        },
        "redis": {
            "hosts": ["2.2.2.2"]
        }
   },
   "production": {
        "db": {
            "hosts":["1.1.1.1", "1.1.1.2", "1.1.1.3"],
            "database": "api"
        },
        "redis": {
            "hosts": ["2.2.2.2", "2.2.2.3"]
        }
   }
}

그런 다음 구성을 가져옵니다.

var config=require('./config.json')[process.env.NODE_ENV || 'dev'];

db.connect(config.db.hosts, config.db.database);

그런 다음 셸을 통해 환경에서 변수를 설정합니다.

export NODE_ENV=staging
pm2 start app.js

환경 변수는 세션 동안 지속됩니다. 따라서 ~/.bashrc변수가 지속되도록 해당 사용자에 대해 파일 에서 설정해야합니다 . 이것은 매 세션마다 변수를 설정합니다.

PM2에는 앱이 데몬 화되기 전에 매번 환경 변수를 설정할 수 있는 배포 시스템 이 있습니다. 이것은 POSIX 시스템의 데몬이 일반적으로 매개 변수를 취하는 방법입니다. 이러한 매개 변수는 프로세스에서 손실되지 않기 때문입니다. 당신의 상황을 감안할 때 그다지 중요하지 않을 수도 있지만 좋은 습관입니다.

또한 프로덕션에서 다운 타임을 방지하기 위해 가능하면 로컬에서 중지 / 시작하고 다시 시작 (클러스터 모드 인 경우)하는 것을 고려해야합니다.


CLI에서 노드 인수를 전달하려면

pm2 start myServer.js --node-args="--production --port=1337"

.

수정 됨

다음에 인수를 추가 할 수 있습니다. --

pm2 start app.js -- --prod

deploymemt에 대한 Sails 문서 .


It is possible to define arguments with the process.

You can define a new process in ecosystem.config.js with an args key, like so:

{
  name            : 'my-service',
  script          : './src/service.js',
  args            : 'firstArg secondArg',
},
{
  name            : 'my-service-alternate',
  script          : './src/service.js',
  args            : 'altFirstArg altSecondArg',
}

Here, the two processes use the same file (service.js), but pass different arguments to it.

Note that these arguments are handled within service.js. In my case I just used process.argv[2] to get the first argument, and so on.


You can send arguments to your script by passing them after --. For example: pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js


Well there are 2 ways you can do to pass the parameters from pm2 to nodejs in CLI:

  • pm2 start app.js -- dev --port=1234 (note there is an extra space between -- and dev)
  • pm2 start app.js --node-args="dev --port=1234"

Both ways, you will find these values exist in process.argv (['dev','--port=1234'])


From the pm2 docs

//Inject what is declared in env_production
$ pm2 start app.js --env production 

//Inject what is declared in env_staging
$ pm2 restart app.js --env staging

참고URL : https://stackoverflow.com/questions/28980307/how-to-pass-arguments-to-app-using-pm2

반응형