最近公司游戏上线,隔天开一组服,导致线上服务器一下爆增,加之服务端有时会core,core后又需要重启服务端程序。起初几台服务器的时候还可以时不时上服务器上看一下程序是否运行正常,是否有core文件,但到后来服务器数量超过50台的时候,明显就忙不过来了,人也疲惫。
根据百度linux批量管理经验,大篇关于dsh批量管理的贴子呈现出来。研究一翻,果然好用。于是立即开始部署,经dsh和shell结合,完全解决上面说到的几个问题,非常棒。增减服务器监控也十分方便,只需要在ip.txt里把服务器的ip写上或删除即可,当然前提是把密钥对配置好。
#!/bin/bash
array=(`cat /usr/local/dsh/etc/ip.txt`)
array_nginx=(`cat /usr/local/dsh/etc/ip.txt`)
e_mail="25497724133@qq.com"
date=`date +%Y/%m/%d-%H:%M`
function check_nginx(){
j=0
while [ $i -lt ${#array_nginx[@]} ];do
nginx_pid=(`dsh -r ssh -m ${array_nginx[$j]} -- ps aux | grep nginx | grep -v grep`)
if [ ${#nginx_pid[@]} -lt 1 ]; then
message="${array_nginx[$j]}无nginx进程 $date"
echo $message
`dsh -r ssh -m ${array_nginx[$j]} /usr/local/nginx/sbin/nginx`
fi
j=$((j+1))
done
}
function check_user(){
x=0
while [ $x -lt ${#array[@]} ];do
user_pid=(`dsh -r ssh -m ${array[$x]} -- ps aux | grep /user | grep -v grep`)
if [ ${#user_pid[@]} -lt 1 ]; then
message="${array[$i]}无user进程 $date"
userd=`dsh -r ssh -m ${array[$x]} -- /etc/init.d/user restart`
echo -e "${message},\n${userd}"
echo -e "${message},\n${userd}"|mail -s "${array[$i]}notuser" ${e_mail}
fi
x=$((x+1))
done
}
function check_core(){
i=0
while [ $i -lt ${#array[@]} ];do
file=(`dsh -r ssh -m ${array[$i]} -- find /home/king_3/exe/ -mmin -5 -name 'core*'`)
if [ ${#file[@]} -gt 0 ]; then
host=${array[$i]}
userd=`dsh -r ssh -m ${host} -- /etc/init.d/user restart`
title="`echo ${host}`core"
message="`echo ${host}` 生成core文件, 文件名路径: ${file[$i]}"
echo -e "${message}.\n${userd}" | mail -s $title $e_mail
echo ${host} ${file[$i]} $date
fi
i=$((i+1))
done
}
check_nginx
check_user
check_core