Как передать переменные сценария командной строки в конфигурацию pm2 JSON - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь настроить PM2 для наших существующих приложений Java. Строка в файле start.sh, которая запускает службы, выглядит следующим образом:

exec nohup "$JAVACMD" -jar $JVM_OPTS  $CLASSPATH server $ENV_NAME/config.yml

Где $ JAVACMD - это java, $ JVM_OPTS - это параметры JVM, установленные ранее в сценарии, $ ENV_NAME - среда, в которой выполняется сценарий. запускается, а $ CLASSPATH - это путь к пути к jar службы, который содержит все зависимости и код. Я пытаюсь настроить это, используя JSON-файл конфигурации pm2, поэтому, когда служба запускается, она добавляется в PM2. Моя проблема в том, что я не знаю, как передать эти переменные параметру arg в файле конфигурации. Очевидно, я могу жестко кодировать $ JAVACMD и $ CLASSPATH, чтобы они были их соответствующими значениями. Однако я не могу сделать это с $ JVM_OPTS, так как он содержит много разных параметров, некоторые из которых были токенизированы. Переменная выглядит следующим образом:

JVM_OPTS='"-Djava.security.auth.login.config='"$HOME"'/config/SQLJDBCDriver.conf" "-Djava.security.krb5.conf='"$HOME"'/config/krb5.conf"'  #it is much longer than this, but this gives an idea of the format

Пока мой конфигурационный файл pm2 выглядит так:

{
  "apps" : [
    {
      "name" : "search-service",
      "script" : "java",
      "args" : [
        "-jar $CLASSPATH $JVM_OPTS server $CLASSPATH $ENV_NAME/config.yml"
      ],
      "out_file" : "~/logs/search-service.log",
      "error_file" : "~/logs/search-service.log",
      "log_date_format" : "YYYY-MM-DD HH:mm:ss"
    }
  ]
}

И строка в скрипте start.sh для его вызова:

pm2 start ./pm2_config.json

Однако, когда я звоню ./start.sh, за которым следует pm2 ls, я вижу, что эта служба завершилась ошибкой в ​​pm2. pm2 show дает мне следующее:

| status            │ errored                                                   │
│ name              │ search-service                                            │
│ version           │ N/A                                                       │
│ restarts          │ 15                                                        │
│ uptime            │ 0                                                         │
│ script path       │ /usr/bin/java                                             │
│ script args       │ -jar $CLASSPATH $JVM_OPTS server $ENV_NAME/config.yml     │
│ error log path    │ /home/test/logs/search-service.log                        │
│ out log path      │ /home/test/logs/search-service-svc.log                    │
│ pid path          │ /home/test/.pm2/pids/search-service-202.pid               │
│ interpreter       │ none                                                      │
│ interpreter args  │ N/A                                                       │
│ script id         │ 202                                                       │
│ exec cwd          │ /home/test/search-service/bin                             │
│ exec mode         │ fork_mode                                                 │
│ node.js version   │ N/A                                                       │
│ node env          │ N/A                                                       │
│ watch & reload    │ ✘                                                         │
│ unstable restarts │ 0                                                         │
│ created at        │ N/A

Когда я пытаюсь передать переменную в стартовой строке:

pm2 start ./pm2_config.json --$JVM_OPTS

Тогда все, что происходит, это то, что скрипт выводит номер версиипм2. Я также пробовал это с "$ JVM_OPTS" и "- $ JVM_OPTS", с тем же результатом.

Исходя из этого, я знаю, что переменные не заменяются в файле конфигурации. Есть ли способ сделать это?

...