尝试这个
#!/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 分钟检查一次您的手机是否处于活动状态。因此,这显着降低了您生活中的噪音,但它也让您知道您的手机仍处于连接状态。
您可以更改sleep 600
为sleep 300
每 5 分钟检查一次,当然,您也可以更改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