実現したいこと
ラズベリーパイでHomebridgeを稼働させており、ログファイルに任意の文字列が発生したときに、Homebride を再起動させたい。
前提
Homebridge のログファイルの最終行に"Socket had a problem and will reconnect to"と出てきたらHomebridgeサーバーを再起動させたいと思っています。
- 監視対象のファイルは/var/lib/homebridge.log
- 以下のようなスクリプトを書き、nohup ./logchecker.sh &で実行、スクリプトは(まずは動作検証用に)スマホにLINEを送る内容になっています。
#!/bin/sh # Target TARGET_LOG="/var/lib/homebridge/homebridge.log" # Word for detection _error_conditions="Socket had a problem and will reconnect to" hit_action() { while read i do echo $i | grep -q "${_error_conditions}" if [ $? = "0" ];then # Script curl -X POST -H 'Authorization: Bearer API key hogehoge' -F 'message=hogehoge' https://notify-api.line.me/api/notify fi sleep 10 done } # main if [ ! -f ${TARGET_LOG} ];then touch ${TARGET_LOG} fi tail -n 1 -f $TARGET_LOG | hit_action
発生している問題・エラーメッセージ
狙いどおりlogファイルの最終行がSocket had a problem and will reconnect to XXXXX...になるとスクリプトは動くのですが、その後ログが進んで最終行が別の内容になっても、killするまで10秒ごとにLINEに通知が飛び続けます。
スクリプトの実行は1回だけでよいのですが、どのように解決すればよいでしょうか。
その他
当方非プログラマの超初心者です。コピペしたプログラムを改変する程度のスキルです。
上記のスクリプトは以下から拝借しております。
https://qiita.com/Qrg/items/107928672569a8141222
【2022/03/23/11/19追記】otn様への回答
一度エラーが発動すると下記のようなエラーが同時に1行~10行ぐらい書き込まれます(行数は状況により変化、デバイス名部分は伏せています)。なおタイムスタンプはありません。このエラーを放置すると、5秒置き程度で同じエラーが書き込まれます。プラグインを再起動するとエラーは静まります。本来はこのプラグインのエラーを修正すべきだと思いますが、このプラグインの開発者ではありませんので。。。Githubでissueとして上げてはいます。
[Tuya] Socket had a problem and will reconnect to "デバイス1" (EHOSTUNREACH) [Tuya] Socket had a problem and will reconnect to "デバイス2" (Error: ERR_CONNECTION_TIMED_OUT) [Tuya] Socket had a problem and will reconnect to "デバイス3" (Error: ERR_CONNECTION_TIMED_OUT) [Tuya] Socket had a problem and will reconnect to "デバイス4" (Error: ERR_CONNECTION_TIMED_OUT)
otn様のいう通り一気に10行書き込まれたら10回curlしているのをループとして見えている可能性もあり、これをまとめて1回にする方法があれば、それでもいいのかもしれません。
【2022/03/23/11/19追記】otn様へmの回答2
ps fx で下記のような内容が得られます。
30645 ? S 0:00 sshd: pi@notty 30646 ? Ss 0:00 \_ /usr/lib/openssh/sftp-server 30610 ? Ss 0:00 /lib/systemd/systemd --user 30611 ? S 0:00 \_ (sd-pam) 30561 ? S 0:00 /bin/sh ./logchecker.sh 30562 ? S 0:00 \_ tail -n 0 -f /var/lib/homebridge/homebridge.log 30563 ? S 0:00 \_ /bin/sh ./logchecker.sh 31971 ? S 0:00 \_ curl -k https://hogehoge 18040 ? Ssl 1:01 hb-service 18056 ? Sl 0:32 \_ homebridge 18069 ? Sl 0:12 | \_ homebridge: homebridge-hogehoge1 18077 ? Sl 0:35 | \_ homebridge: homebridge-hogehoge2 18079 ? Sl 0:35 | \_ homebridge: homebridge-hogehoge3 18089 ? Sl 0:15 | \_ homebridge: homebridge-hogehoge4 ・ ・ ・
回答1件
あなたの回答
tips
プレビュー