Java 如何将命令行脚本变量传递给pm2配置JSON

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文件来设置它,因此当服务启动时,它会

我正在尝试为我们现有的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
{
  "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”进行了尝试,结果相同

基于此,我知道配置文件中没有替换变量。有没有办法做到这一点