我有一个 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 &
但它并没有像预期的那样工作。 你有什么建议吗?
附注Java 应用程序是来自第 3 方的遗留应用程序,因此我无法在应用程序代码本身中执行逻辑。
最佳答案
当在日志中发现“channel incative”字符串时,终止 java 并重新启动脚本。日志文件被清除,以便可以再次搜索“channel”字符串。使用 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
关于linux - 如何根据日志消息重新启动脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58256639/