计算程序运行耗时
背景:需要对某个脚本进行补数任务,2020年7月-2021年3月底,因里面有同比、环比,不能并行执行,
且只能在非批量跑数时间(白天9点半-17:30)执行补数,为更好安排跑数时间,需知道补一天数据需执行多长时间(格式:*h*m*s)
方法:在shell脚本中添加程序耗时计算(如下三步骤)
--(1)原shell脚本
#!/bin/bash
# 1.获取开始、结束时间(获取当前时间)
timer_start=`date "+%Y-%m-%d %H:%M:%S"`
timer_end=`date "+%Y-%m-%d %H:%M:%S"`
# 2.计算时间差
duration=`echo $(($(date +%s -d "${timer_end}") - $(date +%s -d "${timer_start}"))) | awk '{t=split("60 s 60 m 24 h 999 d",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`
# 3.打印开始、结束时间、耗时
echo "开始:$timer_start"
echo "结束:$timer_end"
echo "耗时:$duration"
--(2)添加至补数脚本中
#!/bin/bash
date1="$1"
date2="$2"
echo "date1:$date1"
echo "date2:$date2"
startdate=`date -d "-0 day $date1" +%Y%m%d`
enddate=`date -d "-0 day $date2" +%Y%m%d`
echo "startdate:$startdate"
echo "enddate:$enddate"
# 添加程序运行耗时0917
# 1.获取程序开始时间(获取当前时间)
timer_start=`date "+%Y-%m-%d %H:%M:%S"`
i=$startdate
while [[ $i < `date -d "+1 day $enddate" +%Y%m%d` ]]
do
echo $i
##a.sql 表跑数脚本
impala -f 实际脚本详细目录(绝对路径):如:/home/a.sql --var=c_ds="`date -d "-0 day $i" +%Y-%m-%d`" --var=c_next_ds="`date -d "1 day $i" +%Y-%m-%d`"
i=`date -d "+1 day $i" +%Y%m%d`
done
# 2.获取程序结束时间(获取当前时间)
timer_end=`date "+%Y-%m-%d %H:%M:%S"`
# 3.计算时间差
duration=`echo $(($(date +%s -d "${timer_end}") - $(date +%s -d "${timer_start}"))) | awk '{t=split("60 s 60 m 24 h 999 d",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`
# 4.打印开始、结束时间、时间差
echo "开始:$timer_start"
echo "结束:$timer_end"
echo "耗时:$duration"
--(3)实际跑数脚本 a.sql 中对该时间变量的应用
例如:
select '${var:c_ds}' as stat_date
,o.name as name
from a
where to_date(a.reg_at) <= '${var:c_ds}'

浙公网安备 33010602011771号