RiotShield (League of Legends のサードパーティ プレイヤー スクレーパー) の出力を監視してクラッシュを監視する小さな bash スクリプトを作成しようとしています。ログにキーワードが見つかった場合は、プロセスを強制終了して再起動する必要があります。
これが私のbashスクリプトです。
#!/bin/bash
crash[1]="disconnected"
crash[2]="38290209"
while true; do
list=$(tail log.log)
#clear
echo "Reading Log"
echo "========================================"
echo $list
for item in ${list//\\n/ }
do
for index in 1 2
do
c=${crash[index]}
#echo "Crash Word:" $c
if [[ "$c" == *"$item"* ]]; then
echo "RiotShield has crashed."
echo "Killing RiotShield."
kill $(ps aux | grep '[R]iotShield.exe' | awk '{print $2}')
echo "RiotShield killed!"
echo "Clearing log."
echo > log.log
echo "Starting RiotShield"
(mono RiotShield.exe >> log.log &)
fi
done
done
sleep 10
done
私のクラッシュ配列は、クラッシュしたときにログに表示されることがわかっているキーワードです。38290209 は、League of Legends での私のサモナー ID であり、サモナー名の検索を実行した瞬間に、ID がログに表示されるため、テスト目的でのみそこにあります。
問題は切断されていても 38290209 がログに表示されない
if [[ "$c" == *"$item"* ]]; then
起動し、RiotShield プロセスを強制終了してから再起動します。
クラッシュのキーワードが増えると、クラッシュ配列の長さが長くなるので、それだけではできません
if [[ "$c" == "*disconnected*" ]]; then
よろしくお願いします SOF
編集:
作業コードの追加:
#!/bin/bash
crash[1]="disconnected"
crash[2]="error"
while true; do
list=$(tail log.log)
clear
echo "Reading Log"
echo "========================================"
echo $list
for index in 1 2
do
c=${crash[index]}
#echo "Crash Word:" $c
if [[ $list == *$c* ]]; then
echo "RiotShield has crashed."
echo "Crash Flag: " $c
echo "Killing RiotShield."
kill $(ps aux | grep '[R]iotShield.exe' | awk '{print $2}')
echo "RiotShield killed!"
echo "Clearing log."
echo > log.log
echo "Starting RiotShield"
(mono RiotShield.exe >> log.log &)
fi
done
sleep 10
done