Я пытаюсь настроить 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", с тем же результатом.
Исходя из этого, я знаю, что переменные не заменяются в файле конфигурации. Есть ли способ сделать это?