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

标签 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 > 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/

相关文章:

linux - 如何将目录及其子目录中的所有文件复制到另一个目录?

bash - 如何创建 Bash 监听器来接收 PHP 请求?

linux - bash - 查找所有 .bashrc 文件并附加到它们

bash - 是否可以列出与 ls 模式匹配的文件?

linux - 使用脚本 shell 获取文件中每一行的最后两个字母

c - `initgroups`如何调用 `setgroups`来初始化用户的补充组ID列表?

arrays - 带有 bash for 循环的 SSH 命令选项

linux - 将变量从 SSH 服务器分配给本地机器变量

linux - 未找到 jessie debian 的规范源

linux - 如何计算出两个不同 Linux 服务器之间的系统时间偏移量?