今天网站出现了一个bug,判定是网站缓存清理出现了问题。排查之后,定位到了清理缓存的脚本上。
脚本可以简化如下:
1 | HOUR=`date +%H` |
脚本的第一行赋值有问题,date命令的手册:
1 | %H hour (00..23) |
使用%H
参数得到的小时数是两位的,所以当前是0点到9点的时候,得到的是00–09。由于前缀0的原因,bash会把该值当作八进制来处理。
问题来了,当时间在7点到九点的时候,脚本的执行就会发生错误:
- 7点时,HOUR的值为07,运行到第五行(($HOUR+1))的时候得到08。八进制表示的数竟然出现了8,肯定会出错。
- 8点和9点时,在脚本第一行赋值的时候就会出错。
这个问题由两种解决方案:
- 第一种:将脚本的第一行改为
1
HOUR=10#`date +%H`,
加上10#
是告诉bash,把数值当作10进制数来处理。
- 第二种:将脚本的第一行改为
1
HOUR=`date +%k`
因为%k
参数得到的小时数是(0..23),没有前缀0,所以就不存在进制的问题了。