Скрипт мониторинга работы процесса и перезапуск при отсутствии
03 Nov 2024 | Автор: dd |Возникла тут ситуация, что на одном серваке по непонятным причинам стали падать прокси. Точнее причина всегда практически одна – не хватка оперативы для обслуживания всех процессов, но виртуалка мисипусечная с диском в три гига, т.ч поднимать swap файл на 2 гига никак не получится.
Поэтому надо было сделать проверку наличия сервиса в запущенных процессах и запуск его, если он отсутствовал.
Я такую уже вещь делал, когда поставлял одной компании несколько сот тысяч прокси IPv6, но спустя годы это тайное знание оказалось забытым и, тем более, не описанным в блоге, т.ч решил накидать небольшую памятку.
Путем некоторых манипуляций получился следующий скрипт:
###### /root/3proxy-restart.sh ######
#! /bin/bash
logfile="/var/log/3proxy-restatr.log"
case "$(pidof 3proxy | wc -w)" in
0) echo "3proxy not running, restarting proxy service: $(date)" >> $logfile /usr/local/bin/3proxy /usr/local/etc/3proxy/3proxy.cfg &
;;
1) echo "3proxy running, all OK: $(date)" >> $logfile
;;
*) echo "multiple instances of 3proxy running. Stopping & restarting 3proxy: $(date)" >> $logfile
kill $(pidof 3proxy | awk '{ $1=""; print $0}')
;;
esac
###############
Итак скрипт через пидоф (в хорошем смысле этого слова) смотрит количество запущенных процессов, после чего увидев 0 процессов стартует сервис с соответствующей записью в лог, при 1 просто пишет, что все нормально, если число процессов больше 1, то просто грохает лишние
Для того чтобы скрипт отрабатывал на постоянке, прописываем его в расписание
# crontab -e
*/5 * * * * root /root/3proxy-restart.sh
даем права на исполнение
# chmod 755 /root/3proxy-restart.sh
и рестартим сервис крона
# service crond restart
После чего можем проверить работу скрипта грохая процесс или добавляя новые.
В принципе можно и без дополнительного скрипта обойтись, с разными сценариями, а просто закинуть в кронтаб что то вроде такого:
pidof 3proxy >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting 3proxy: $(date)" >> /var/log/3proxy-restart.log && /usr/local/bin/3proxy /usr/local/etc/3proxy/3proxy.cfg