Подтвердить что ты не робот

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

Я использую pm2 для запуска своего приложения, но я не могу передать ему аргумент. команда, которую я использую, - это pm2 start app.js - dev. Хотя это работает вечно.

4b9b3361

Ответ 1

Вы можете сделать, как указано в этом билете: 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 обычно принимают параметры, поскольку эти параметры не теряются в процессе. Учитывая ваши обстоятельства, это может не иметь особого значения, но это хорошая практика.

Кроме того, вы должны рассмотреть возможность остановки/запуска локально и перезапустить (если в режиме кластера), когда это возможно, чтобы предотвратить простои в процессе производства.

Ответ 2

Если вы хотите передать аргументы node из CLI, тогда

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

.

Edited

вы можете добавить любые аргументы после -x --

pm2 start app.js -x -- --prod

Sails docs для deploymemt.

Ответ 3

Ну, есть два способа сделать параметры с pm2 на nodejs в CLI:

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

Оба способа, вы найдете эти значения в process.argv (['dev', '- port = 1234'])

Ответ 4

Из 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

Ответ 5

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

Вы можете определить новый процесс в 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] для получения первого аргумента и т.д.