开发者社区> 问答> 正文

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

我有一个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 &

但它没有按预期工作。你有什么建议吗?

ps Java应用程序是来自第三方的遗留应用程序,因此我无法在应用程序代码本身中进行逻辑处理。

展开
收起
祖安文状元 2020-01-07 14:04:45 395 0
1 条回答
写回答
取消 提交回答
  • 当在日志中找到“通道指示”字符串时,请杀死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
    
    2020-01-07 14:04:53
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载