因此,我目前正在研究使用RasPi作为其控制器的自动CO /烟雾探测器。我希望它在检测事件发生时发出SMS警报。我希望它像这样工作。
Sensor(s) > RPi > Main Server > SMS via sendmail
我想知道如何在RPi和服务器之间保持稳定的链接。我当时正在考虑使用SSH和Ping以及Supervisord来保持一切正常运行,但是我还希望能够使用主服务器上的命令来测试脚本是否在远程工作。
SSH和Ping似乎是解决此问题的好方法吗?如果是这样,即使设备正在响应Ping,我如何确保RPi上的脚本也不会崩溃?
谢谢
编辑:不必是实时通信,我正在考虑每10秒检查一次
答案 0 :(得分:0)
我建议您在Raspberry Pi上使用这样的脚本作为脚本。
#!/usr/bin/env bash
SVIP=192.168.0.9 # Server IP address
PORT=30000
################################################################################
# This function is called whenever the script exits or dies
################################################################################
function cleanup(){
echo DEBUG: EXIT code running...
# Kill the alive function we started in the background
kill -9 $alivePID
}
trap cleanup EXIT
################################################################################
# This function runs continuously in the background answering "pings"
################################################################################
function alive(){
echo DEBUG: Listening for pings on port $PORT
while :; do
echo "$RANDOM" | nc -l $PORT
echo DEBUG: Ouch.
done
}
################################################################################
# main function of script
################################################################################
# Start the ping responder in the background and note its PID so we can kill it
alive &
alivePID=$!
# Do whatever you want to do here - e.g. read temperatures
sleep 20
从底部开始约4行开始阅读。它在后台启动名为alive()
的函数并获取其PID,以便可以在退出时停止。 alive()
函数使用netcat
监听“ pings” ,并以随机数回复每个人。
如果脚本停止运行,它将终止alive()
函数,因此它将不再回复ping。
在服务器上,您可以通过键入以下命令“ ping” Raspberry Pi(将RASPI_IP替换为Raspberry Pi的IP地址):
echo "PING" | nc <RASPI_IP> 30000 ; echo $?
,如果该服务在Raspberry Pi上运行,您将获得一个随机数和退出代码0
,而如果服务在Raspberry Pi上运行,您将获得退出代码1
,并且没有答复。 Raspberry Pi没有运行。