0

我正在使用 Java 构建一个独立的应用程序以作为 Linux (Ubuntu) 守护程序服务运行。为此,我正在使用Java Service Wrapper库。

在执行服务期间,我希望能够查询应用程序执行的任务的某些状态。换句话说,我希望能够在终端上键入时打印自定义消息:

service my-app status

目前它打印的消息是这样的:

My App is running: PID:1000, Wrapper:STARTED, Java:STARTED

我知道我需要使用更复杂的集成方法(而不是最简单的方法),但我找不到如何拦截“状态”调用来打印我自己的消息。

如何使用 Java Service Wrapper 自定义该消息?

4

1 回答 1

1

我得到了一个半解决方案。根据@Naytzyrhc 的建议,检查包装器脚本代码,我发现包装器库读取 3 个文件来创建状态消息:

  1. bin/my-app.pid打印正在运行的进程的PID;
  2. bin/my-app.status打印包装器本身的状态;
  3. bin/my-app.java.status打印包装应用程序的状态。

因此,在应用程序代码中,要覆盖状态消息,只需将消息写入my-app.java.status文件中即可。

只有一个问题:如果状态消息包含换行符,service my-app status则不会打印它们,因为它使用echo命令(如本问题Capturing multiple line output into a Bash variable中所述)。要解决此问题,只需更改以下行:

eval echo `gettext '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS'`

到:

eval echo `gettext '$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:"$JAVASTATUS"'`

(在 上使用双引号$JAVASTATUS)。

这是一个半解决方案,因为它不会像我想要的那样向正在运行的应用程序触发事件。但它适用于自定义状态消息:它取决于应用程序消息更新的频率。

于 2013-07-22T18:44:14.673 回答