一、shell监控网站是否可以访问

也不知道CSDN怎么搞shell代码块,反正各种都试了一遍,感觉没有一种让代码看起来舒服点的,这里就把文件上传上来。看不清楚的同学可以下载下来,用notepad++看。

里面的一些命令不懂得可以百度搜索一下。后续我会把用到的那些命令解释一下。

下载地址:http://download.csdn.net/detail/qq_34021712/9794638

#!/bin/bash
#func:监控网站是否可以访问
# author:wangsaichao  
# date:2017/03/23  

#连接的mysql数据库
MYSQL="mysql -h127.0.0.1 -P3306 -uroot -proot"
#查询所有需要监控的网站,这里是查询数据库,这是查询所有状态为1的网站,number字段是ID,这条sql执行完就是查询需要监控点网站的ID,是一个List
sql="select number from fw.tomcat where activestatus='1'"
#开始执行,这里因为要一直监控,所以开启无限循环
while true 
do
	#向控制台输出一条信息,$(date +'%F %H:%M:%S')日期格式化
	echo "[info]开始监控服务...[$(date +'%F %H:%M:%S')]"
	#这里是执行sql语句,并把查询到List 赋值给ref这个变量,注意要带上``号,数字1左边,Esc键下方,如果不带,会报错说 -e这个参数不知道
	ref=`$MYSQL -e "$sql"`
	#循环遍历查询到的list,shell脚本for循环 格式是:
	#		for 要赋值变量 in 要遍历的List
	#		do
	#			这里写循环执行的内容
	#		done
	for list in $ref
	do 
		#这里要判断一下,因为shell执行完sql 查询到的内容其实是 number 1 这样的,也就是说只有一条语句但是 shell会把数据库字段也给你放到list中,要筛选一下
		if [ $list = 'number' ];  then 
			echo "$list"
		else 
			#这里是根据遍历的id在此查询数据库,拿到要监控的网址,例如:https://www.baidu.com/
			weburl=`$MYSQL -e "select name from fw.tomcat where number=$list"`
			for url in $weburl
			do
				#这里跟上面类似,筛选掉字段名称
				if [[ "$url" != 'name' ]]; then
					echo $url
					#curl命令是查看网站是否可以访问, -I参数是返回http响应头,awk截取文本第二列,再用awk截取第一行,不熟悉的同学可以百度学习一下
					ServiceCode=$(curl -s -m 10 --connect-timeout 10 -l $url -w %{http_code} -I|awk '{print $2}'|awk 'NR==1{print}') 
					if [ $ServiceCode -eq 302 -o $ServiceCode -eq 200 ]; then 
						echo "服务正常"
						$MYSQL -e "update fw.tomcat set runstatus=0 where number=$list"
					else 
						echo "服务无法访问"
						$MYSQL -e "update fw.tomcat set runstatus=1 where number=$list"
					fi
				fi
			done	
		fi
	done 
	sleep 60
done
			
		



你可能感兴趣的:(shell)