ログを追跡し、特定のメッセージを検索するスクリプトを作成する必要があります。スクリプトはメッセージが表示されたときにログを監視し続け、メッセージが5秒間再び表示されない場合は、コマンドを実行するスクリプトが必要です。
これは擬似コードです:
後続のログファイルに「エラーが発生しました」というメッセージが見つかりました。このメッセージは10〜20回繰り返されます。メッセージのスクロールが停止してから5秒待ってから、「systemctl restart myservice」を実行します。
awkを使用しようとしていますが、コマンドを実行する前にメッセージがスクロールを停止するのを待つ方法がわかりません。これは私のコードです。
tail -F /var/log/mylog.log | awk '
/TestString goes here/ { system("sleep 5; systemctl restart myservice") }'
ベストアンサー1
bash
corutilsと中間ファイルを使用してtimeout
これを行うことができます。
server.bash を再起動します。
# Wait for the initial "TestString"
tail -n0 -F logfile |
while IFS= read -r; do
if [[ "$REPLY" == TestString ]]; then
break
fi
done
# See if "TestString" repeats at least every 5 seconds
touch ts
while [ -e ts ]; do
rm -f ts
timeout 5 bash -c '
tail -n0 -f logfile |
while IFS= read -r; do
if [[ "$REPLY" == TestString ]]; then
touch ts
fi
done
'
done
systemctl restart myserver
バラよりグレッグのウィキBash 読み込み中のループに関する追加情報。