これを試して
#!/bin/bash
while : ; do
if ping -c 10 192.168.1.4 &> /dev/null ; then
kodi-send --action="PlayMedia(/storage/music/welcome.mp3)"
fi
sleep 600
done
このソリューションは永久に実行されますwhile :
。10 分ごとに、電話がアクティブかどうかを確認します。したがって、これにより生活のノイズが大幅に減少しますが、電話がまだ接続されていることもわかります.
5 分ごとに変更sleep 600
して確認することも、もちろん、快適な任意の秒数に変更することもできます。sleep 300
600
仕様によると完璧な解決策ではありませんが、ロック ファイルの管理は複雑になる可能性があります。このソリューションに慣れてから、次のようなものを追加することを検討してください
if ping ... ; then
if ! [[ -e /tmp/phoneOnLine ]] ; then
kodi-send ...
echo "Found phone at $(date)" > /tmp/phoneOnLine
fi
else
echo "no phone found"
/bin/rm -f /tmp/phoneOnLine
fi
これが機能しないまれなケースが確実に見つかるため、コードをデバッグする準備をしてください。echo
各ロジック パス (if/else/...) 内に msgを追加します。コードがどのように機能するかを理解する。
また、スクリプトが偽造されるのを防ぐために、起動時にファイルを削除します。
したがって、可能な完全な解決策は
#!/bin/bash
#file may not exist, ignore error msg with "2> /dev/null"
/bin/rm -f /tmp/phoneOnLine 2> /dev/null
#loop forever
while : ; do
# check for phone
if ping -c 10 192.168.1.4 &> /dev/null ; then
# check for "lock" file
if ! [[ -e /tmp/phoneOnLine ]] ; then
kodi-send --action="PlayMedia(/storage/music/welcome.mp3)"
echo "Found phone at $(date)" > /tmp/phoneOnLine
else
echo "Phone already found"
fi # !! -e /tmp/ph
else # no ping
echo "no phone found"
/bin/rm -f /tmp/phoneOnLine 2>/dev/null
fi # ping
sleep 600
done