Linux 如何根据日志消息重新启动脚本

Linux 如何根据日志消息重新启动脚本,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我有一个java应用程序,希望在日志文件中出现某些消息时重新启动它。 到目前为止,我尝试了以下脚本: #!/bin/bash java -jar app.jar > app.log 2>&1 tail -f app.log | while read LOGLINE do [[ "${LOGLINE}" == *"channel incative"* ]] && pkill -P $$ java && java -jar app.jar

我有一个java应用程序,希望在日志文件中出现某些消息时重新启动它。 到目前为止,我尝试了以下脚本:

#!/bin/bash

java -jar app.jar > app.log 2>&1
tail -f app.log | while read LOGLINE
do
   [[ "${LOGLINE}" == *"channel incative"* ]] && pkill -P $$ java &&  java -jar app.jar > app.log 2>&1
done
我使用以下命令运行scritp

nohup sh app.sh &
但它并没有像预期的那样起作用。 你有什么建议吗

p、 java应用程序是来自第三方的遗留应用程序,因此我无法在应用程序代码本身中执行逻辑。

当在日志中找到“channel incative”字符串时,杀死java并重新启动脚本。清除日志文件,以便再次搜索“通道”字符串。使用sleep给java进程一点死的时间

#!/bin/bash
sleep 1
java -jar app.jar > app.log 2>&1
rm app.log 2> /dev/null
touch app.log
tail -f app.log | while read LOGLINE
do
   [[ "${LOGLINE}" == *"channel incative"* ]] && pkill -P $$ java && exec app.sh
done

java应用程序不依赖于后台。尝试“java-jarapp.jar>app.log 2>&1&”