web-dev-qa-db-ja.com

pm2を使用してアプリに引数を渡す方法は?

私はpm2を使用してアプリを起動していますが、引数を渡すことができません。私が使用しているコマンドはpm2 start app.js-devです。これは永遠に機能しますが。

58
user3373581

このチケットに記載されているように行うことができます: https://github.com/Unitech/pm2/issues/1

ただし、環境を渡す場合は、環境変数を活用することを検討してください。これにより、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には deploy system があり、アプリをデーモン化する前に毎回環境変数を設定できます。これは、POSIXシステムのデーモンが通常パラメーターを受け取る方法です。これらのパラメーターはプロセスで失われないためです。あなたの状況を考えると、それほど重要ではないかもしれませんが、それは良い習慣です。

さらに、本番環境でのダウンタイムを防ぐために、ローカルでの停止/起動、および可能な限り再起動(クラスターモードの場合)を検討する必要があります。

23
tsturzl

CLIからノード引数を渡したい場合

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

編集済み

--の後に引数を追加できます

pm2 start app.js -- --prod

deploymemt のセールドキュメント。

112

プロセスで引数を定義することは可能です。

以下のように、argsキーを使用してecosystem.config.jsで新しいプロセスを定義できます。

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

ここで、2つのプロセスは同じファイル(service.js)を使用しますが、異なる引数を渡します。

これらの引数はservice.js内で処理されることに注意してください。私の場合、最初の引数を取得するためにprocess.argv[2]を使用しただけです。

13
Travis

--の後に引数を渡すことで、スクリプトに引数を送信できます。例:pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js

5
Alex

CLIでpm2からnodejsにパラメーターを渡すには、次の2つの方法があります。

  • pm2 start app.js-dev --port = 1234(-とdevの間に余分なスペースがあることに注意してください)
  • pm2 start app.js --node-args = "dev --port = 1234"

どちらの方法でも、これらの値はprocess.argv(['dev'、 '-port = 1234'])に存在します

1
Xin

pm2 ドキュメントから

//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
0
kenny