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

时间:2019-10-30 13:42:37

标签: 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文件进行设置,因此当服务启动时,它将被添加到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”进行了尝试,结果相同。

基于此,我知道这些变量不会在配置文件中被替换。有什么办法吗?

0 个答案:

没有答案