【问题标题】:How can I start a java application with parameters using a pm2 config file?如何使用 pm2 配置文件启动带有参数的 java 应用程序?
【发布时间】:2020-12-04 08:15:05
【问题描述】:

我正在尝试使用 pm2 启动 graphhopper...graphhopper 是一个 java 应用程序,我在终端上启动它的方式是转到它的文件夹并输入以下命令:

java -jar matching-web/target/graphhopper-map-matching-web-1.0-SNAPSHOT.jar server config.yml

此应用程序在命令行运行时运行良好,但我还没有成功地将其作为服务使用pm2 运行。我使用的配置文件是这个(pm2 start config.json):

{
    "apps":[
    {
        "name":"graphhopper",
        "cwd":".",
        "script":"/usr/bin/java",
        "args":[
            "-jar",
            "/home/myyser/graphhopper/map-matching/matching-web/target/graphhopper-map-matching-web-1.0-SNAPSHOT.jar",
            "server",
            "config.yml"
        ],
        "log_date_format":"YYYY-MM-DD HH:mm Z",
        "exec_interpreter":"",
        "exec_mode":"fork"
     }
   ]
}

我 100% 确定我在这里出错的是我编写 "server", "config.yml" 参数的方式...查看 pm2 logs graphhopper 我可以看到这些参数根本没有被识别。 ..我也尝试调整它的完成方式,但我没有设法找出正确的解决方案。我知道如何使用pm2 不带参数地启动Java 应用程序。但是如何使用具有 graphhopper 的情况下的参数的 java 应用程序呢?

【问题讨论】:

  • 编写一个 bash 脚本。包含在 bash CLI 中,上面的 args 列表。即 bash 是 java cli args 的包装器。然后只需从 json 中的应用程序属性调用该包装器外壳
  • @RobertRowntree 谢谢!!只需 bash 脚本就足以解决我的问题。创建脚本并授予它执行权限后,我可以使用 pm2 start graphhopper.sh --name=graphhopper 启动我的服务。我的问题的文件原来是没有必要的。

标签: node.js pm2


【解决方案1】:

如 cmets 中所述,可以通过创建 bash 脚本并使用 pm2 运行它而不是直接运行 java 应用程序来解决此问题...使用的 bash 脚本是文件 graphhopper.sh,如下所示:

#!/bin/bash
java -jar matching-web/target/graphhopper-map-matching-web-1.0-SNAPSHOT.jar server config.yml

并使用pm2 将其作为服务启动:

pm2 start graphhopper.sh --name=graphhopper

【讨论】:

    【解决方案2】:

    您也可以直接在 pm2 中运行 fat jar - 使用两个破折号分隔命令 args:

    pm2 start java --  -jar matching-web/target/graphhopper-map-matching-web-1.0-SNAPSHOT.jar server config.yml
    

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多