我正在尝试为我们现有的Java应用程序设置PM2。运行服务的start.sh文件中的行如下:
exec nohup "$JAVACMD" -jar $JVM_OPTS $CLASSPATH server $ENV_NAME/config.yml
其中$ JAVACMD是Java,$ JVM_OPTS是脚本前面设置的JVM选项,$ ENV_NAME是脚本运行的环境,$ CLASSPATH是指向包含所有依赖项的服务jar路径的路径。码。我正在尝试使用pm2配置JSON文件进行设置,因此当服务启动时,它将被添加到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
然后发生的一切是脚本输出pm2的版本号。我也用“ $ JVM_OPTS”和“-$ JVM_OPTS”进行了尝试,结果相同。
基于此,我知道这些变量不会在配置文件中被替换。有什么办法吗?