healthcheck.sh 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/bin/bash
  2. containerstart=`stat -c %Z /proc/1`
  3. curtime=`date +%s`
  4. if (( curtime-containerstart < 180 )); then
  5. echo "Container start period, returning 0"
  6. exit 0
  7. fi
  8. #curl -f -H 'Host:demo.infoclinica.ru' 127.0.0.1:9000/login || exit 1
  9. # Проверяем наличие файла с переменной time_to_dead
  10. if [ -f /tmp/dead ];then
  11. dead_to_time=$(cat /tmp/dead)
  12. if (( ${curtime} > ${dead_to_time} ));then kill 1;fi
  13. else
  14. # Определяем изменился ли адрес админки
  15. ping -c3 $(cat /tmp/admin_ip)
  16. if [[ $? -ne 0 ]]; then
  17. new_admin_ip=$(nslookup ${ADMIN_HOST}.${APPNET}|grep Address|tail -n1|cut -d " " -f2)
  18. if [[ ${new_admin_ip} != $(cat /tmp/admin_ip) ]];then
  19. ping -c3 ${new_admin_ip} || exit 0
  20. fi
  21. # Вычисляем адрес node и последний октет
  22. node_ip=$(nslookup ${HOSTNAME}.${APPNET}|grep Address|tail -n +2|cut -d " " -f2)
  23. last_node_oct=$(echo ${node_ip}|cut -d "." -f4)
  24. # Вычисляем адреса task.node и сортируем последние октеты, сравниваем с последним окстетом текущей node и отправляем node на перезапуск
  25. last_task_node_oct=($(echo $(nslookup tasks.${SERVICE_NAME}.${APPNET}|grep Address|tail -n +2|cut -d " " -f2|cut -d "." -f4)))
  26. IFS=$'\n' sorted=($(sort <<<"${last_task_node_oct[*]}"))
  27. unset IFS
  28. for i in ${!sorted[*]}
  29. do
  30. if [[ ${last_node_oct} -eq ${sorted[i]} ]];then time_to_dead=$((i*180+curtime+30));echo "${time_to_dead}" > /tmp/dead;fi
  31. done
  32. fi
  33. fi
  34. exit 0