如何在文本文件中搜索特定行,然后在使用bash查找时终止进程?

如何在文本文件中搜索特定行,然后在使用bash查找时终止进程?,bash,if-statement,match,kill,Bash,If Statement,Match,Kill,我对脚本编写几乎没有经验,但我想深入了解它 基本上,这是针对StarMade服务器的,因为它的java进程不会在崩溃时关闭,而是保持运行,因此很难正确地检测崩溃,而且这种情况经常发生 不过,我想要的是在服务器日志文件中找到指示服务器已冻结/已崩溃的特定行,并在读取该行后终止进程,然后另一个脚本将再次启动它(已经获得该部分)。服务器不断更新日志文件,因此脚本基本上必须以某种方式“监视”该文件 我在任何地方都找不到与这个想法完全匹配的东西,但我试图从许多来源中拼凑出一些东西,尽管我很确定这是完全错误

我对脚本编写几乎没有经验,但我想深入了解它

基本上,这是针对StarMade服务器的,因为它的java进程不会在崩溃时关闭,而是保持运行,因此很难正确地检测崩溃,而且这种情况经常发生

不过,我想要的是在服务器日志文件中找到指示服务器已冻结/已崩溃的特定行,并在读取该行后终止进程,然后另一个脚本将再次启动它(已经获得该部分)。服务器不断更新日志文件,因此脚本基本上必须以某种方式“监视”该文件

我在任何地方都找不到与这个想法完全匹配的东西,但我试图从许多来源中拼凑出一些东西,尽管我很确定这是完全错误的:

#!/bin/bash
cd "$(dirname "$0")"
if grep -Fxq "[SERVER] SERVER SHUTDOWN" log.txt.0
then
    kill -9 $(pidof StarMade.jar)
else
    false
fi
据我所知,这应该持续检查log.txt.0文件,以查找与“[SERVER]SERVER SHUTDOWN”直接匹配的内容,并在服务器进程关闭时终止它,或者在不关闭时不执行任何操作,这是正确的方法吗?我不想用愚蠢的错误来破坏事物。

试试这个:

if ( grep -Fxq "[SERVER] SERVER SHUTDOWN" log.txt.0 > /dev/null ); then
    kill -9 $(pidof StarMade.jar)
fi

我会尝试一下,但缺点是只有在服务器崩溃时我才能知道它是否有效,因此可能需要一些时间。
grep-q
不会向
STDOUT
写入任何内容。我想知道在这种情况下什么被重定向到
/dev/null
。@devnull谢谢-我没有查看参数。在这种情况下,重定向是不必要的。我认为没有任何其他内容被重定向。@Archer您可以用相关短语构造一个日志文件,并测试脚本。你不必等待崩溃。我有一个日志文件,其中包含我希望它找到的字符串,但在运行脚本时,控制台会告诉我kill命令是如何工作的,不确定它出了什么问题。(因此它可能正确地抓住了字符串)