Задача : если сервис Domoticz не отвечает по ряду причин в течении 5 минут, автоматически перезапустить сервис и сообщить в Telegram в чат о проблеме.
Создаем небольшой скрипт в /etc/scripts/check_domoticz_online.sh
root@rp1> chmod 755 /etc/scripts/check_domoticz_online.sh root@rp1> apt-get install curl
#!/bin/sh # check domoticz status=`curl -s -i -H "Accept: application/json" "http://192.168.1.30:8080/json.htm?type=devices&rid=1" | grep "status"| awk -F: '{print $2}'|sed 's/,//'| sed 's/\"//g'` if [ $status ] then echo "Domoticz has already been started" else sudo service domoticz.sh stop sleep 5 sudo service domoticz.sh start | curl -s "https://api.telegram.org/bot344155761:AAHmrb9kazf0C1Xqz3452dGАвК5QjpQTw5baoKY-U/sendMessage?chat_id=125444999&text=Domoticz was offline, attempting a restart." fi
где:
- 192.168.1.30:80 – IP адрес нашего Domoticz сервера и его порт
- bot344155761:AAHmrb9kazf0C1Xqz3452dGАвК5QjpQTw5baoKY-U/sendMessage?chat_id=125444999 -API key для Telegram
и добавляем в Cron задачу
root@rp1> crontab -e -u root
*/5 * * * * /etc/scripts/check_domoticz_online.sh > /dev/null 2>&1
вот еще пример скрипта, который собирает лог с данными падения (дата-время) сервиса domoticz с последующим его рестартом
#!/bin/bash CONFIG=/var/log/domoticz_state_checker.log dt=$(date '+%d/%m/%Y %H:%M:%S') DomoticzState=`sudo service domoticz.sh status` if [[ $DomoticzState == *"active (running)"* ]] then echo "Domoticz is running. Nothing to do." elif [[ $DomoticzState == *"inactive (dead)"* ]] then echo "$dt, Domoticz is not running. Restarting Domoticz..." >> "$CONFIG" sudo service domoticz.sh restart echo "$dt, Domoticz restarted..." >> "$CONFIG" fi
и еще пример
#!/bin/bash # add crontab */5 * * * * sudo /home/pi/scripts/domoticz_state_checker.sh # sudo chmod +x domoticz_state_checker while true do DomoticzState=`sudo service domoticz status` if [[ $DomoticzState == *"active (running)"* ]] then echo 'Domoticz is running. Nothing to do.' elif [[ $DomoticzState == *"inactive (dead)"* ]] then echo 'Domoticz is not running. Restarting Domoticz...' sudo service domoticz restart echo 'Domoticz restarted.' fi done ### Done