Столкнуляс с проблемой, что активаторы и дисковери отмирают при большом количестве задач. Для решения проблемы было принято решение написать скрипт, позволяющий восстановить умершие сервисы. Детектирование производится по несовпадению количества запущенных процессов в supervisord и consul
#!/bin/bash ## Check needed and running workers needWorkers=$(curl -s localhost:8500/v1/agent/services | python -m json.tool | grep act | wc -l) haveWorkers=$(/opt/noc/noc ctl status | grep activ | grep RUNN | wc -l) ## Check needed and running discovery needDiscovery=$(curl -s localhost:8500/v1/agent/services | python -m json.tool | grep discovery | wc -l) haveDiscovery=$(/opt/noc/noc ctl status | grep discovery | grep RUNN | wc -l) if [[ "$needWorkers" != "$haveWorkers" ]]; then ## Find dead workers by recent log update l=$(find /var/log/noc/activator-default*.log -cmin +5 -exec basename {} \; | grep activ) for file in ${l[@]}; do proc=${file%.*} service=activator-default:$proc echo restart $service /opt/noc/noc ctl restart $service done elif [[ "$needDiscovery" != "$haveDiscovery" ]]; then ## Find dead discovery by recent log update l=$(find /var/log/noc/discovery-default*.log -cmin +5 -exec basename {} \; | grep discov) for file in ${l[@]}; do proc=${file%.*} service=discovery-default:$proc echo restart $service /opt/noc/noc ctl restart $service done fi