在企业运维工作中,每一步操作完毕后都应该进行快速有效的检查,这是一名合格运维人员的良好习惯。在我们变更,nginx配置重启(包含reload),要会通过调用脚本获取header信息或模拟用户访问URL来自动检查Nginx的启动是否正常。最大限度的保证服务重启后,能够偶快速确定网站情况,而无需手工敲命令查看。这样如果有问题,快速回退上一版本的配置文件(配置前已做备份)。
#!/bin/bash
#
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
DATE=$(date +%Y-%m-%d-%H-%M-%S)
MAIL=`which mail`
# mail name
NAME=(
liujian
e_yunwei
)
# check urls status
URLS=(
http://192.168.99.233:9004/webfof_login/login
http://www.aaca.com
)
# curl 获取状态码
curl_ip() {
CURL=$(curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}' $1|egrep "200|302"|wc -l)
return $CURL
}
# 邮件
mail() {
for m in ${NAME[*]}
do
echo "Retry curl $1 again is Failure,Please check url on $DATE" | $MAIL -s "Service state Warning" $m@erichfund.com
done
}
# 主程序
main() {
for n in ${URLS[*]}
do
curl_ip $n
if [ $? -eq 1 ];then
action "curl $n" /bin/true
else
action "curl $n" /bin/false
curl_ip $n
sleep 10
if [ $CURL -eq 1 ];then
action "Retry curl $n again" /bin/true
else
action "Retry curl $n again" /bin/false
mail $n
fi
fi
done
}
main
# crontab 添加定时任务5分钟执行一次。
# */5 * * * * /bin/bash /server/scripts/chk_url.sh &>/dev/null
例如:将百度腾讯阿里网站URL,放置到属组array
array=(
http://baidu.com
http://qq.com
http://taobao.com
)
# chmod +x chk_curl.sh
# sh chk_curl.sh
执行结果如下:
[root@localhost scripts]# sh chk_curl.sh
curl http://baidu.com [ OK ]
curl http://qq.com [ OK ]
curl http://taobao.com [ OK ]