Как передать аргументы в приложение с помощью pm2?

Я использую pm2 для запуска моего приложения, но я не могу передать ему аргумент. команду я использую это начать ПМ2 приложение.Яш -- Дев. Хотя это работает вечно.

6 ответов


вы можете сделать, как указано в этом билете: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

паруса docs для deploymemt.


можно определить аргументы с процессом.

вы можете определить новый процесс в ecosystem.config.js С args ключ, вот так:

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

здесь два процесса используют один и тот же файл (service.js), но передайте ему разные аргументы.

обратите внимание, что эти аргументы обрабатываются в пределах service.js. В моем случае я просто использовал process.argv[2] получить первый аргумент и так далее.


Ну есть 2 способа, которые вы можете сделать, чтобы передать параметры из pm2 в nodejs в CLI:

  • pm2 запустить приложение.js -- dev -- port=1234 (обратите внимание, что между -- и dev есть дополнительное пространство)
  • pm2 запустить приложение.js --node-args= "dev -- port=1234"

в обоих случаях вы обнаружите, что эти значения существуют в process.argv (['dev', '--port=1234'])


вы можете отправлять аргументы в свой скрипт, передавая их после --. Например: pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js


С 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