#!/bin/bash
start_date=20230611
end_date=20231204
# 设置为东8时区
TZ='Asia/Shanghai'
export TZ
print_info() {
datetime=$(date "+%F %T")
echo -e "${datetime} [INFO] : $1"
}
#设定重试次数
set_retry_time=3000000
#当前重试次数
curr_retry_time_e=0
curr_retry_time_f=0
#队列
queue="samsreport"
#sql 文件变量
#天表
# sql_file_1="1.sh"
#sql_file_2="dwd_item_sams_otb_dtl_di.sh"
#sql_file_3="dwd_item_sams_otb_status_info_df.sh"
#sql_file_4="dwd_item_sams_otb_dtl_allstatus_di.sh"
#sql_file_5="dwd_item_sams_otb_start_date_info_wi.sh"
#周表
# sql_file_10="1.sh"
# sql_file_11="dwd_item_sams_otb_sales_start_wf.sql"
# sql_file_12="dwd_item_sams_otb_stock_info_wi.sql"
sql_file_13="dev_ads_item_sams_otb_stage_sales_info_wi_1207.sql"
#创建文件夹
dir_e="log_e"
if [ ! -d "$dir_e" ];then
mkdir $dir_e
fi
#创建文件夹
dir_f="log_f"
if [ ! -d "$dir_f" ];then
mkdir $dir_f
fi
#sql -e 执行函数
execute_e_sql (){
curr_retry_time_e=0
#ge小于等于
while [[ $curr_retry_time_e -le $set_retry_time ]]
do
print_info
echo -e "$yestoday_str $1 正在执行 "
hive --hiveconf tez.queue.name=$queue -e $1 -hivevar yestoday_str=$2 >>log_e/$1 2>&1
#echo "$yestoday_str $1 $2"
if [ $? -eq 0 ];then
print_info
echo "$yestoday_str $1 成功 "
break
else
print_info
echo "$yestoday_str $1 失败 "
curr_retry_time_e=$(($curr_retry_time_e+1))
fi
done
curr_retry_time_e=0
}
#sql -f 执行函数
execute_file_sql (){
curr_retry_time_f=0
while [[ $curr_retry_time_f -le $set_retry_time ]]
do
print_info
echo -e "$yestoday_str $1 正在执行 "
hive --hiveconf tez.queue.name=$queue -f $1 -hivevar yestoday_str=$2 >>log_f/$1 2>&1
#echo "$yestoday_str $1 $2"
if [ $? -eq 0 ];then
print_info
echo -e "$yestoday_str $1 成功 "
break
else
print_info
echo -e "$yestoday_str $1 失败 "
curr_retry_time_f=$(($curr_retry_time_f+1))
fi
done
curr_retry_time_f=0
}
# main 执行主体 ---------------------------------------------------------------------------------------------------------------------------------
#转成yyyy-MM-dd类型再比较
end_date=`date -d "$end_date" +"%Y-%m-%d"`
start_date=`date -d "$start_date" +"%Y-%m-%d"`
while [[ $start_date < $end_date ]]
do
#循环跑数第一天start_date赋值到yestoday_str 参数
#yestoday_str=`date -d "$start_date" +"%Y-%m-%d"`
yestoday_str=$start_date
print_info
echo "$yestoday_str 开始执行天表"
#echo "$yestoday_str 开始执行天表--参数set_retry_time $set_retry_time 参数curr_retry_time_f $curr_retry_time_f------- "
# execute_file_sql $sql_file_1 $yestoday_str
#execute_file_sql $sql_file_2 $yestoday_str
#execute_file_sql $sql_file_3 $yestoday_str
# 获取当前日期的星期几
week_day=$(date -d "$yestoday_str" +%w)
if [ "$week_day" -eq 0 ]; then
echo "$yestoday_str 今天 是星期日,开始 执行周表------"
# execute_file_sql $sql_file_10 $yestoday_str
# execute_file_sql $sql_file_11 $yestoday_str
# execute_file_sql $sql_file_12 $yestoday_str
execute_file_sql $sql_file_13 $yestoday_str
else
echo "$yestoday_str 今天不是星期日,不 执行周表------"
fi
#换行
echo -e "\n"
echo -e "\n"
#当天执行完成,
start_date=`date -d "+1 day $yestoday_str" +"%Y-%m-%d"`
done;
shell脚本刷数
于 2023-10-27 16:31:13 首次发布