Forráskód Böngészése

Изменил логику работы healthcheck.sh

tomishinets.v 5 éve
szülő
commit
2eaee6849b
3 módosított fájl, 32 hozzáadás és 27 törlés
  1. 5 1
      docker-entrypoint.sh
  2. 0 26
      healthceck.new.sh
  3. 27 0
      healthcheck.sh

+ 5 - 1
docker-entrypoint.sh

@@ -17,7 +17,11 @@ if [ ! -z "${APPNET}" ]; then
      nslookup ${ADMIN_HOST}.${APPNET}
    done
 fi
-export admin_ip=$(nslookup ${ADMIN_HOST}.${APPNET}|grep Address|tail -n1|cut -d " " -f2)
+
+# See Redmine 103910
+admin_ip=$(nslookup ${ADMIN_HOST}.${APPNET}|grep Address|tail -n +2|cut -d " " -f2)
+echo ${admin_ip} > /tmp/admin_ip
+
 echo "#Dummy" >> /etc/rc.d/init.d/functions
 source /etc/init.d/web-registry-portal status
 

+ 0 - 26
healthceck.new.sh

@@ -1,26 +0,0 @@
-#!/bin/bash
-
-# Определяем изменился ли адрес админки
-admin_ip="10.0.29.40"
-ping -c3 ${admin_ip}
-if [[ $? -ne 0 ]]; then
-  new_ip=$(nslookup admin|grep Address|tail -n1|cut -d " " -f2)
-  ping -c3 ${new_ip} || echo "adminhost not available!!! Exit"
-# Вычисляем адрес node и последний октет
-  admin_net=$(nslookup admin|grep Address|tail -n1|cut -d " " -f2|cut -d "." -f1-3)
-  for i in $(hostname -I)
-  do
-    if [[ $(echo ${i}|cut -d "." -f1-3) == ${admin_net} ]]; then node_ip=${i};fi
-  done
-  last_node_oct=$(echo ${node_ip}|cut -d "." -f4)
-#Вычисляем адреса task.node и сортируем последние октеты, сравниваем с последним окстетом текущей node и отправляем node на перезапуск
-  last_task_node_oct=($(echo $(nslookup tasks.node | grep Address | tail -n2 | cut -d " " -f2| cut -d "." -f4)))
-  IFS=$'\n' sorted=($(sort <<<"${last_task_node_oct[*]}"))
-  unset IFS
-  for i in ${!sorted[*]}
-  do
-    if [[ ${last_node_oct} -eq ${sorted[i]} ]];then : $((t=${i}*3));sleep ${t}m;kill 1;break;fi
-  done
-fi
-
-curl -f -H 'Host:demo.infoclinica.ru' 127.0.0.1:9000/login || exit 1

+ 27 - 0
healthcheck.sh

@@ -8,3 +8,30 @@ if (( curtime-containerstart < 180 )); then
 fi
 
 curl -f -H 'Host:demo.infoclinica.ru' 127.0.0.1:9000/login || exit 1
+
+# Проверяем наличие файла с переменной time_to_dead
+if [ -f /tmp/dead ];then
+  if (( curtime > $(cat /tmp/dead) )); then kill 1;fi
+fi
+# Определяем изменился ли адрес админки
+
+ping -c3 $(cat /tmp/admin_ip)
+if [[ $? -ne 0 ]]; then
+  new_admin_ip=$(nslookup ${ADMIN_HOST}.${APPNET}|grep Address|tail -n1|cut -d " " -f2)
+  if [[ ${new_admin_ip} != $(cat /tmp/admin_ip) ]];then
+    ping -c3 ${new_admin_ip} || exit 0
+  fi
+# Вычисляем адрес node и последний октет
+  node_ip=$(nslookup ${HOSTNAME}.${APPNET}|grep Address|tail -n +2|cut -d " " -f2)
+  last_node_oct=$(echo ${node_ip}|cut -d "." -f4)
+# Вычисляем service_name
+  service_name=$(nslookup ${node_ip}|grep "in-addr.arpa"|cut -d " " -f3|cut -d "." -f1)
+# Вычисляем адреса task.node и сортируем последние октеты, сравниваем с последним окстетом текущей node и отправляем node на перезапуск
+  last_task_node_oct=($(echo $(nslookup tasks.${service_name}.${APPNET}|grep Address|tail -n +2|cut -d " " -f2|cut -d "." -f4)))
+  IFS=$'\n' sorted=($(sort <<<"${last_task_node_oct[*]}"))
+  unset IFS
+  for i in ${!sorted[*]}
+  do
+    if [[ ${last_node_oct} -eq ${sorted[i]} ]];then : $((time_to_dead=${i}*180+curtime));echo ${time_to_dead} > /tmp/dead;fi
+  done
+fi