我正在构建一个独立的应用程序,使用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自定义该消息?
答案 0 :(得分:1)
我得到了半解决方案。按照@Naytzyrhc的建议检查包装器脚本代码,我发现包装器lib读取3个文件来创建状态消息:
bin/my-app.pid
打印正在运行的进程的PID; bin/my-app.status
打印包装器本身的状态; 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
上使用双引号。)
这是一个半解决方案,因为它不会像我想的那样向正在运行的应用程序激活事件。但它适用于自定义状态消息:它取决于应用程序消息更新的频率。