您的位置:首页 > 运维架构 > Shell

开发监控Web 服务的Shell脚本

2017-08-10 00:19 495 查看
解决问题场景: 使用while守护进程的方式,每隔10秒确定一次网站是否正常。

脚本 website_mon.sh 如下:

#!/bin/bash
. /etc/init.d/functions 	#引入函数库
check_count=0
# 定义检测的URL数组,包含多个URL地址
url_list=( http://www.baidu.com http://www.baidu100.com http://127.0.0.1 )
function wait()
{
echo -n '3秒后,执行检查URL操作.';
for ((i=0;i<3;i++))
do
echo -n "."; sleep 1
done
echo
}
function check_url()	#<==定义检测URL的函数
{
wait #<==执行倒计时函数
for((i=0;i<`echo ${#url_list[*]}`;i++)) #<==循环数组元素
do
wget -o /dev/null -T 3 --tries=1 --spider ${url_list[$i]} >/dev/null 2>&1
#<==检测是否可以访问数组元素的地址
if [ $? -eq 0 ]			#<==如果返回值为0,则表示访问成功
then
action "${url_list[$i]}" /bin/true #<==优雅地显示成功结果
else
action "${url_list[$i]}" /bin/false #<==优雅地显示失败结果
fi
done
((check_count++)) #<==检测次数+1
}
main(){			#<==定义主函数
while true		#<==开启一个持续循环
do
check_url	#<==加载检测url的函数
echo "--------------check count:${check_count}-------------------"
sleep 10		#<==间歇10秒
done
}
main		#<==调用主函数运行程序


分析:

采用Shell数组的方法,同时检测多个URL是否正常,并给出专业的展示效果,是实际工作中可用的脚本。

. /etc/init.d/function引入函数库,才能够使用actoin“${url_list[$i]}” /bin/true或者action“${url_list[$i]}” /bin/false,效果如下:



可以更专业的显示输出结果。

for((i=0;i<`echo${#url_list[*]}`;i++)) 这里面的echo ${#url_list[*]}为输出url_list数组的个数。

wget-o /dev/null -T 3 --tries=1 --spider ${url_list[$i]} >/dev/null 2>&1 这句wget的用法比较复杂,我们具体分析下:

wget-o /dev/null : wget -o 下载信息保存到指定文件中,比如:wget -o tim.zip http://www.baidu.com,然后百度的内容页变会被保存到tim.zip文件中,这里wget -o /dev/null 即将下载的内容丢到垃圾箱(/dev/null)。

--spider: 不下载任何文件

--tries=1:重试次数为1次,wget默认重试20次连接下载文件

-T3: 设置超时时间为3秒

>/dev/null2>&1: 表示标准输出和错误输出都重定向到/dev/null

其他脚本都比较容易理解。

补充:

1、如何监控nginx的一个简单脚本:

脚本nginx_mon.sh如下

#!/bin/bash
if [ `netstat -tlunp|grep nginx|wc -l` -gt 0 ] #过滤进程名为mysqld,转成数字
then
echo "Nginx is Running."
else
echo "Nginx is Stopped."
/data/program/nginx/sbin/nginx
fi


2、上述中如果检测到异常可以用到邮件相关通知功能,见博客: 我的博客:Linux
对外发送邮件功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: