好的,这是关于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”并在此之后终止进程,但这不是一种防水方法,因为有了不同的错误,消息可能不会出现,导致这个脚本无用。 / p>
所以我有这个工具可以向服务器发送命令,但在服务器处于崩溃状态时返回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”执行某些操作(使该部分工作)。
答案 0 :(得分:0)
不确定是否可以解决您的问题,但这一行:
ps -aef | grep -v grep | grep 'StarMade.jar' | awk '{print $2}'
可以改为
ps -aef | awk '/[S]tarMade.jar/ {print $2}'
[S]
阻止awk
找到自己。
或者就像这样得到pid
pidof StarMade.jar