Java 如何将命令行脚本变量传递给pm2配置JSON
我正在尝试为我们现有的Java应用程序设置PM2。运行服务的start.sh文件中的行如下所示:Java 如何将命令行脚本变量传递给pm2配置JSON,java,json,bash,monitoring,pm2,Java,Json,Bash,Monitoring,Pm2,我正在尝试为我们现有的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文件来设置它,因此当服务启动时,它会
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
{
"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"
}
]
}
到目前为止,我的pm2配置文件如下所示:
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
{
"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展会给了我以下信息:
| 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”进行了尝试,结果相同
基于此,我知道配置文件中没有替换变量。有没有办法做到这一点