os:rhel6.8 2.6.32-642.el6.x86_64
今天在测试编写的redis数据库的ping检测脚本时报了一个错误“./redis_ping.sh: line 40: 09: value too great for base (error token is "09")”,问了度娘,说是因为shell中的双括号运算符会将0开头的数字当做8进制来计算,所以会报错,09比基数大。脚本中用到双括号运算符的地方是处理日期时分秒的地方,如下:
cur_date=`date "+%Y-%m-%d %H:%M:%S"`---获取格式化时间
cur_hour_m2=$(($((${cur_date:11:2}+0))%2))---截取字符串,并用双括号运算符使之与0相加(为了去掉占位0,通常是使用let,expr等加0),但是事与愿违,恰好双括号运算符对于0开头的数字不能当做十进制计算
cur_min=$((${cur_date:14:2}+0))--截取字符串,并加0
cur_sec=$((${cur_date:17:2}+0))--截取字符串,并加0
修改为:
cur_hour=$(($(date +%-H)%2))--模2,也就是控制2小时执行一次
cur_min=$(date +%-M)
cur_sec=$(date +%-S)
这个脚本的思路是,死循环,每3秒ping一次redis集群中的所有服务器,如果有问题就写预警信息,如果全部正常,那么没2小时也写一次预警信息,代表ping脚本的心跳正常。
今天在测试编写的redis数据库的ping检测脚本时报了一个错误“./redis_ping.sh: line 40: 09: value too great for base (error token is "09")”,问了度娘,说是因为shell中的双括号运算符会将0开头的数字当做8进制来计算,所以会报错,09比基数大。脚本中用到双括号运算符的地方是处理日期时分秒的地方,如下:
cur_date=`date "+%Y-%m-%d %H:%M:%S"`---获取格式化时间
cur_hour_m2=$(($((${cur_date:11:2}+0))%2))---截取字符串,并用双括号运算符使之与0相加(为了去掉占位0,通常是使用let,expr等加0),但是事与愿违,恰好双括号运算符对于0开头的数字不能当做十进制计算
cur_min=$((${cur_date:14:2}+0))--截取字符串,并加0
cur_sec=$((${cur_date:17:2}+0))--截取字符串,并加0
修改为:
cur_hour=$(($(date +%-H)%2))--模2,也就是控制2小时执行一次
cur_min=$(date +%-M)
cur_sec=$(date +%-S)
这个脚本的思路是,死循环,每3秒ping一次redis集群中的所有服务器,如果有问题就写预警信息,如果全部正常,那么没2小时也写一次预警信息,代表ping脚本的心跳正常。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29822273/viewspace-2139085/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29822273/viewspace-2139085/