22 June 2014

一、需求场景

前端页面性能测评系统每天晚上9点到第二天早上10点,都会自动执行播放页性能测试用例,然后在第二天中午12点开始对测试过程中收集到的性能指标数据进行汇总求均值,最后求出来的数据都算作昨天的性能指标数据。

测评系统的自动化流程控制都是有bash脚本实现的,在开发脚本时,昨天的日期只是在求出今天的日期基础上减一实现:

end_date=`date +%Y%m%d`;
start_date=$[end_date - 1];

系统开始运行之后,一直表现正常,直到6月1号的时候,出现问题了,算出的昨天的日期start_date是20140600

二、方案

gnu bash:data -d 'yesterday' +%Y%m%d

gnu yesterday

bsd bash:date -v -1d +%Y%m%d

bsd yesterday


其实gnu bash的date -d '-1 day',date -d '1 day ago', date -d 'last day'都OK的:

gnu yesterday 2


把-d选项中的day换成week/month/year就能计算上周/月/年的日期了。

同样,bsd的-v选项中的d换成w/m/y。

三、花絮

之所以提到bsd,是因为开发时用的是mac,我用mac开发调试成功的bash脚本,部署到服务器上(centos)就挂了。除了date命令,sed/awk也是有一坨不一致的地方,开发的时候安装gsed/gawk,部署的时候再把命令名称改成sed/awk。

或许下次代码中加入针对运行环境(uname -a)是bsd/gnu的判断逻辑,这样部署时源代码就不用改动了。



blog comments powered by Disqus