PM2, выход с кодом 0 (перезапуск при запуске) - PullRequest
0 голосов
/ 17 марта 2020

Я попытался установить PM2 на свое приложение, и оно отлично работает на localhost. Однако проблема возникает, когда я перемещаю приложение в контейнер docker и пытаюсь запустить его на компьютере Linux.

Я запускаю команду npm run production, которая выполняет следующий код:

pm2 start ecosystem.config.js --env production --no-autorestart

После этого в командной строке я вижу, как PM2 загружается и запускает мое приложение на всех доступных ядрах.

app         | [PM2] PM2 Successfully daemonized
app         | [PM2][WARN] Applications App not running, starting...
app         | [PM2] App [App] launched (2 instances)
app         | ┌─────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
app         | │ id  │ name      │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
app         | ├─────┼───────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
app         | │ 0   │ App    │ default     │ 1.0.0   │ cluster │ 36       │ 0s     │ 0    │ online    │ 0%       │ 38.0mb   │ root     │ disabled │
app         | │ 1   │ App    │ default     │ 1.0.0   │ cluster │ 43       │ 0s     │ 0    │ online    │ 0%       │ 25.0mb   │ root     │ disabled │
app         | └─────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

И затем возвращается сообщение:

app exited with code 0

Весь процесс повторяется снова и снова и снова ... Я пытался запустить его на 'cluster_mode' на 'fork', я пытался запустить его с --no-autorestart, но он все еще продолжает перезапускаться.

Я буквально понятия не имею, что я делаю неправильно?

@@ EDIT, добавлено ecosystem.config. js


module.exports = {
  apps : [{
    name: 'App',
    script: './build/server/index.js',

    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    exec_mode: 'cluster_mode',
    args: 'none',
    instances: os.cpus().length,
    autorestart: false,
    watch: false,
    // max_memory_restart: '3G',
    env: {
      NODE_ENV:'development',

    },
    env_production: {
      NODE_ENV:'production',

    }
  }],

  deploy : {
    production : {
      user : 'szygendab',
      host : '212.83.163.1',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

1 Ответ

0 голосов
/ 17 марта 2020

ОБНОВЛЕНИЕ

Я нашел решение. В основном приложение на docker должно запускаться не с pm2, а с pm2-runtime. По этой причине он работал на локальном хосте, а не внутри образа docker. Из того, что я понимаю, docker выполнил задачу и закрыл ее, после чего он продолжал получать другие стартовые задачи и циклически повторял запуск приложения.

Вместо pm2 start .... Я переключил метод для тестового экземпляра на pm2-runtime start ... и это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...