使用Java Service Wrapper的自定义Linux服务状态消息

时间:2013-07-18 18:00:21

标签: java daemon java-service-wrapper

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

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

service my-app status

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

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

我理解我需要使用更复杂的integration method(而不是simplest one),但我找不到如何拦截“状态”调用来打印我自己的消息。

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

1 个答案:

答案 0 :(得分:1)

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

  1. bin/my-app.pid打印正在运行的进程的PID;
  2. bin/my-app.status打印包装器本身的状态;
  3. bin/my-app.java.status打印已包装应用程序的状态。
  4. 因此,在应用程序代码中,要覆盖状态消息,只需在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上使用双引号。)

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