使用shell测试cdn状态
公司使用多家cdn,测试cdn在各个地方的响应情况,以便于提高视频访问的用户体验。分别在阿里云华南1,华东1,华东2,华北2等不同地区节点测试。该随笔为自己所用。
1.该脚本会测试某一cdn的url,如果302,继续测试,如果是503,则测试cdn源站是否也为503,并记http_code,录测试时间以及测试的url等信息。
#!/bin/bash #set -e
start_time=$(date +%s)
today=$(date +%F)
mkdir -pv /cdn/logs &> /dev/null
dl200="/cdn/logs/dl200-$today.log"
dlno200="/cdn/logs/dlno200-$today.log"
> $dl200
> $dlno200
#echo $dl200 $dlno200
#exit
cat /cdn/shell/dltxt/dl-$today |while read line
do
#echo $line
HTTP_CODE=$(curl -XGET -I -m -o /dev/null -s -w "%{http_code}""\n" $line)
if [ "$HTTP_CODE" -eq ];then
CURRENT_TIME=$(date '+%Y%m%d %H:%M:%S')
echo $HTTP_CODE $CURRENT_TIME $line >> $dl200
elif [ "$HTTP_CODE" -eq ];then
HTTP_NEW_CODE=
NEW_URL=$(curl -XGET -I -m -s $line |grep ^Location|awk -F" " '{print $2}'|tr -d '\r'|tr -d '$')
while [ "$HTTP_NEW_CODE" -eq ]
do
#echo $NEW_URL
HTTP_NEW_CODE=$(curl -XGET -I -m -o /dev/null -s -w "%{http_code}""\n" $NEW_URL)
#echo $HTTP_NEW_CODE
#if [ "$HTTP_NEW_CODE" -eq 200 ];then
# echo $HTTP_NEW_CODE $NEW_RUL >> /xiaoke/shell/logs/gs200.log
if [ "$HTTP_NEW_CODE" -eq ];then
NEW_URL=$(curl -XGET -I -m -s $NEW_URL |grep ^Location|awk -F" " '{print $2}'|tr -d '\r'|tr -d '$')
elif [ "$HTTP_NEW_CODE" -eq ];then
CURRENT_TIME=$(date '+%Y%m%d %H:%M:%S')
echo $HTTP_NEW_CODE $CURRENT_TIME $NEW_URL >> $dl200
elif [ "$HTTP_NEW_CODE" -eq ];then
CURRENT_TIME=$(date '+%Y%m%d %H:%M:%S')
echo $HTTP_NEW_CODE $CURRENT_TIME $NEW_URL >> $dlno200
SOURCE_URL=$(echo $line |sed 's;gxbvideo-dl;gxbvideo;g')
SOURCE_CODE=$(curl -XGET -I -m -o /dev/null -s -w "%{http_code}""\n" $SOURCE_URL)
if [ "$SOURCE_CODE" -eq ];then
echo $SOURCE_CODE $CURRENT_TIME $SOURCE_URL >> $dlno200
else
echo $SOURCE_CODE $CURRENT_TIME $SOURCE_URL >> $dlno200
fi
else
CURRENT_TIME=$(date '+%Y%m%d %H:%M:%S')
echo $HTTP_NEW_CODE $CURRENT_TIME $NEW_URL >> $dlno200
fi
done
elif [ "$HTTP_CODE" -eq ];then
CURRENT_TIME=$(date '+%Y%m%d %H:%M:%S')
echo $HTTP_CODE $CURRENT_TIME $line >> $dlno200
SOURCE_URL=$(echo $line |sed 's;gxbvideo-dl;gxbvideo;g')
SOURCE_CODE=$(curl -XGET -I -m -o /dev/null -s -w "%{http_code}""\n" $SOURCE_URL)
if [ "$SOURCE_CODE" -eq ];then
echo $SOURCE_CODE $CURRENT_TIME $SOURCE_URL >> $dlno200
else
echo $SOURCE_CODE $CURRENT_TIME $SOURCE_URL >> $dlno200
fi
else
#current_time=$(date '+%Y%m%d %H:%M:%S')
CURRENT_TIME=$(date '+%Y%m%d %H:%M:%S')
echo $HTTP_CODE $CURRENT_TIME $line >> $dlno200
fi
sleep
done
end_time=$(date +%s)
#echo $end_time
delta_time=`expr $end_time - $start_time`
echo "总耗时:$delta_time秒" >> $dl200
2.查看测试信息日志即可。
使用shell测试cdn状态的更多相关文章
- C++文件操作(输入输出、格式控制、文件打开模式、测试流状态、二进制读写)
1.向文件写数据 头文件#include <ofstream> ①Create an instance of ofstream(创建ofstream实例) ②Open the file w ...
- httplib模块,测试cdn节点文件同步
httplib模块是一个专门用于http的模块,urllib和urllib2也都是基于对它进行了更上层次的封装 我记得刚开始的时候,公司用的cdn有段时间抽风,全球40多个节点总是有那么几个节点不同步 ...
- shell监控网卡状态,故障时自动重启网卡
今天朋友找我写个监控网卡状态的脚本,要求在系统网卡挂了可以自己启动起来,这个要求是不是很bt,我考虑了半天,简单的写了个shell脚本来监控,实现原理是使用ping来测试网络连通性,如果不通就重启 ...
- wget 测试cdn
可以通过wget 或curl 指定代理ip来访问同一个链接的不同cdn响应页面.来测试不同cdn间的数据同步问题.
- Linux CAN Shell 测试脚本程序
2012-01-13 22:57:14 为我的开发板2440做二次开发,添加了can驱动,做了驱动测试程序,没理由不添加一个测试脚本程序啊!修改了测试程序,使应用程序更加灵活,添加了一下传递参数.接着 ...
- Shell中退出状态码exit
shell中运行的每个命令都使用退出状态码(exit status)来告诉shell它完成了处理.退出状态码是一个0~255之间的整数值,在命令结束时由命令传回shell. 1 .查看退出状态码 Li ...
- shell脚本 系统状态信息查看
一.简介 源码地址 日期:2018/6/23 介绍:显示简单的系统信息 效果图: 二.使用 适用:centos6+,ubuntu12+ 语言:中文 注意:无 下载 wget https://raw.g ...
- Powershell测试端口状态
function Test-Port { Param([string]$ComputerName,$port = 5985,$timeout = 1000) try { $tcpclient = Ne ...
- Shell编程-条件测试 | 基础篇
什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...
随机推荐
- Sea.js创始人玉伯的前端开发之路
在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框 ...
- c++模版函数
1.定义 可以使用class或者typename字段来申明 template <class T> template <class T1, class T2, ...class TN& ...
- [转] - JAR文件包及jar命令详解 ( MANIFEST.MF的用法 )
常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件.通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像. chm 文档一样双击运行了:而另一种是使用 JET 来进 ...
- android之OptionsMenu
首先编写res/layout/Activity_main.xml 代码如下: <LinearLayout xmlns:android="http://schemas.android.c ...
- jQuery 判断多个 input file 都不能为空
例如有两个图片上传的 input,都必须上传图片: html 选择文件 1 :<input type="file" name="myfile[]" cla ...
- QQ群笔记
uuid就好比你的名字,类似到了班级里,你的名字会被学号替代.同样的连接之后,uuid会被handle句柄替代. 问下CC2541串口用DMA接收的时候,调试程序时候发现,串口发一帧数据,进入两 ...
- java-访问权限
使用以下修饰符来控制对属性和方法的访问: 1.public--公共的,其他任何类均可访问 2.private--私有的,只能在当前类内部被访问,其他都不能访问 3.protected--受保护的,相同 ...
- svn截图
一.合并一个范围的版本 此类型应用最为广泛,主要是把分支中的修改合并到主干上来.在主干上点击右键选择合并,然后选择合并类型:合并一个范围的版本.合并的源URL填写的是要合并的分支的URL,待合 ...
- ajax普通弹窗;Bootstrp弹窗
1.普通弹窗 主页面: <head> <meta http-equiv="Content-Type" content="text/html; chars ...
- SQL Server加密存储过程的破解
建好sp后,在“连接到数据库引擎”对话框的“服务器名称”框中,键入 ADMIN:,并在其后继续键入服务器实例的名称.例如,若要连接到名为 ACCT\PAYABLE 的服务器实例,请键入 ADMIN:A ...