0

好的,这是另一个关于 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”执行某些操作(让那部分工作)。

4

1 回答 1

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
于 2013-11-07T14:20:45.697 回答