では、StarMade サーバーについてもう 1 つ。
以前は、クラッシュを検出するための次のスクリプトがありました。ログを検索するだけでした。
#!/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 例外を返します。私は基本的に、このコマンドの出力を取得し、現在の grep コマンドの代わりに上記の if ステートメントで使用して、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」で何かを実行する必要があります(その部分が機能しました)。