好的,这是另一个关于 StarMade 服务器的内容。
以前我有这个脚本来检测崩溃,它会简单地搜索日志:
#!/bin/bash
cd "$(dirname "$0")"
if ( grep "[SERVER] SERVER SHUTDOWN" log.txt.0); then
sleep 7; kill -9 $(ps -aef | grep -v grep | grep 'StarMade.jar' | awk '{print $2}')
fi
它会找到“[SERVER] SERVER SHUTDOWN”并在此之后终止进程,但这不是防水方法,因为有不同的错误可能不会出现消息,从而使该脚本无用。
所以我有这个工具可以向服务器发送命令,但是当服务器处于崩溃状态时会返回 EOF 异常。我基本上想获取这个命令的输出,并在上面的 if 语句中使用它,而不是当前的 grep 命令,这样当 grep 找到“java.io.EOFException”时它会执行下面的命令.
我可以让它将输出写入一个文件,然后从那里 grep 它,但我想知道,没有更好/更有效的方法来做到这一点吗?
编辑:好的,所以经过一番搜索后,我整理了以下内容:
if ( java -jar /home/starmade/StarMade/StarNet.jar xxxxx xxxxx /chat) 2>&1 > /dev/null |grep java.io.EOFException);
这会是一个有效的 if 语句吗?我需要它在第一个命令的输出中匹配“java.io.EOFException”,如果匹配,则使用“then”执行某些操作(让那部分工作)。