定时调度脚本,刷数脚本

#!/bin/sh

#加上认证,不加的话可能会有很多未知错误
export TZ=Asia/Shanghai
export HDP_VERSION='3.1.0.14-1'
export KRB5_CONFIG=/usr/java/default/jre/lib/security/krb5.conf
kinit -kt /u/users/$USER/.$USER.keytab $USER

#订单跑数
start_date=$1

end_date=$2

sql_path=$3

log_path=$4

run_type=$5
#跑月
if [ "$run_type" = "month" ]; then   #如果是要跑月

	while(( $start_date <= $end_date ))
	do
		#程序开始的时间戳
		start_current=`date "+%Y-%m-%d %H:%M:%S"`
		start_timestamp=`date -d "$start_current" +%s`
		#月初
		m_start_date=`date -d "${start_date:0:4}${start_date:4:2}01" +%Y-%m-%d`
		#月末 
		m_end_date=`date -d "$start_date next month" +%Y-%m-%d`
		m_end_date=`date -d "${m_end_date:0:4}${m_end_date:5:2}01 -1 day" +%Y-%m-%d`
		#系统时间的昨天
		yestoday_int=`date -d "1 days ago" +%Y%m%d`
		yestoday_str=`date -d "1 days ago" +%Y-%m-%d`
		#月末不带-
		m_end_time=`date -d "$m_end_date" +"%Y%m%d"`
		#重试机制
		for(( i=1;i<4;i++)) do
			if [ "$m_end_time" -gt "$yestoday_int" ]; then  #判断月末时间是否大于昨天,大于昨天的话将月末日期改为昨天
				m_end_date=$yestoday_str
				echo "传入参数1:$m_start_date"
				echo "传入参数2:$m_end_date"
                echo "脚本运行开始时间:$start_current"
				hive -hivevar start_date=$m_start_date -hivevar end_date=$m_end_date -f $sql_path > $log_path 2>&1
				ret=$?
				# hive执行成功
				if [ $ret -eq 0 ] ; then
					#程序结束的时间戳
					end_current=`date "+%Y-%m-%d %H:%M:%S"`
					end_timestamp=`date -d "$end_current" +%s`
					run_time=`expr $end_timestamp - $start_timestamp`
					echo "脚本运行结束时间:$end_current"
					echo "脚本运行时间共:$run_time秒"
                    echo "执行成功,开始下一个周期"
					break 2
				fi
				# hive执行失败
				if [ $ret -gt 0 ] ; then
					echo "执行失败,开始重试下一次"
					continue
				fi
			else 
				echo "传入参数1:$m_start_date"
				echo "传入参数2:$m_end_date"
                echo "脚本运行开始时间:$start_current"
				hive -hivevar start_date=$m_start_date -hivevar end_date=$m_end_date -f $sql_path > $log_path 2>&1
				ret=$?
				# hive执行成功
				if [ $ret -eq 0 ] ; then
					#程序结束的时间戳
					end_current=`date "+%Y-%m-%d %H:%M:%S"`
					end_timestamp=`date -d "$end_current" +%s`
					run_time=`expr $end_timestamp - $start_timestamp`
					echo "脚本运行结束时间:$end_current"
					echo "脚本运行时间共:$run_time秒"
                    echo "执行成功,开始下一个周期"
					break
				fi
				# hive执行失败
				if [ $ret -gt 0 ] ; then
					echo "执行失败,开始重试下一次"
					continue
				fi
			fi
		done
		#下一次循环
		start_date=`date -d " +1 day $m_end_date" +"%Y%m%d"`
	done;
#跑天
elif [ "$run_type" = "day" ]; then    #如果是要跑天
	while(( $start_date <= $end_date ))
	do
		#程序开始的时间戳
		start_current=`date "+%Y-%m-%d %H:%M:%S"`
		start_timestamp=`date -d "$start_current" +%s`
		#系统时间的昨天
		yestoday_i=`date -d "1 days ago" +%Y%m%d`
		yestoday_s=`date -d "1 days ago" +%Y-%m-%d`
		#重试机制
		for(( i=1;i<4;i++)) do
			if [ "$start_date" -gt "$yestoday_i" ]; then  #判断跑数时间是否大于昨天,大于昨天的话将日期改为昨天
				yestoday_str=$yestoday_s
				echo "传入参数:$yestoday_str"
                echo "脚本运行开始时间:$start_current"
				hive -hivevar yestoday_str=$yestoday_str -f $sql_path > $log_path 2>&1
				ret=$?
				# hive执行成功
				if [ $ret -eq 0 ] ; then
					#程序结束的时间戳
					end_current=`date "+%Y-%m-%d %H:%M:%S"`
					end_timestamp=`date -d "$end_current" +%s`
					run_time=`expr $end_timestamp - $start_timestamp`
					echo "脚本运行结束时间:$end_current"
					echo "脚本运行时间共:$run_time秒"
                    echo "执行成功,开始下一个周期"
					break 2
				fi
				# hive执行失败
				if [ $ret -gt 0 ] ; then
					echo "执行失败,开始重试下一次"
					continue
				fi				
			else
				yestoday_str=$(date -d "$start_date" +%Y-%m-%d)
				echo "传入参数:$yestoday_str"
                echo "脚本运行开始时间:$start_current"
				hive -hivevar yestoday_str=$yestoday_str -f $sql_path > $log_path 2>&1
				ret=$?
				# hive执行成功
				if [ $ret -eq 0 ] ; then
					#程序结束的时间戳
					end_current=`date "+%Y-%m-%d %H:%M:%S"`
					end_timestamp=`date -d "$end_current" +%s`
					run_time=`expr $end_timestamp - $start_timestamp`
					echo "脚本运行结束时间:$end_current"
					echo "脚本运行时间共:$run_time秒"
                    echo "执行成功,开始下一个周期"
					break
				fi
				# hive执行失败
				if [ $ret -gt 0 ] ; then
					echo "执行失败,开始重试下一次"
					continue
				fi				
			fi
		done
		#下一次循环
		start_date=$(date -d "$yestoday_str 1 day" +%Y%m%d)
	done
#跑半月
elif [ "$run_type" = "halfMonth" ]; then    #如果是要跑半月
	while(( $start_date <= $end_date ))
	do
		#程序开始的时间戳
		start_current=`date "+%Y-%m-%d %H:%M:%S"`
		start_timestamp=`date -d "$start_current" +%s`
		#脚本开始时间
		m_start_date=`date -d "$start_date" +%Y-%m-%d`
		#脚本结束时间 
		m_end_date=`date -d " +15 day $m_start_date" +%Y-%m-%d`
		#系统时间的昨天
		yestoday_int=`date -d "1 days ago" +%Y%m%d`
		yestoday_str=`date -d "1 days ago" +%Y-%m-%d`
		#脚本结束时间 -
		m_end_time=`date -d "$m_end_date" +"%Y%m%d"`
		#重试机制
		for(( i=1;i<4;i++)) do
			if [ "$m_end_time" -gt "$yestoday_int" ]; then  #判断脚本结束时间是否大于昨天,大于昨天的话将脚本结束时间改为昨天
				m_end_date=$yestoday_str
				echo "传入参数1:$m_start_date"
				echo "传入参数2:$m_end_date"
                echo "脚本运行开始时间:$start_current"
				hive -hivevar start_date=$m_start_date -hivevar end_date=$m_end_date -f $sql_path > $log_path 2>&1
				ret=$?
				# hive执行成功
				if [ $ret -eq 0 ] ; then
					#程序结束的时间戳
					end_current=`date "+%Y-%m-%d %H:%M:%S"`
					end_timestamp=`date -d "$end_current" +%s`
					run_time=`expr $end_timestamp - $start_timestamp`
					echo "脚本运行结束时间:$end_current"
					echo "脚本运行时间共:$run_time秒"
                    echo "执行成功,开始下一个周期"
					break 2
				fi
				# hive执行失败
				if [ $ret -gt 0 ] ; then
					echo "执行失败,开始重试下一次"
					continue
				fi
			else 
				echo "传入参数1:$m_start_date"
				echo "传入参数2:$m_end_date"
                echo "脚本运行开始时间:$start_current"
				hive -hivevar start_date=$m_start_date -hivevar end_date=$m_end_date -f $sql_path > $log_path 2>&1
				ret=$?
				# hive执行成功
				if [ $ret -eq 0 ] ; then
					#程序结束的时间戳
					end_current=`date "+%Y-%m-%d %H:%M:%S"`
					end_timestamp=`date -d "$end_current" +%s`
					run_time=`expr $end_timestamp - $start_timestamp`
					echo "脚本运行结束时间:$end_current"
					echo "脚本运行时间共:$run_time秒"
                    echo "执行成功,开始下一个周期"
					break
				fi
				# hive执行失败
				if [ $ret -gt 0 ] ; then
					echo "执行失败,开始重试下一次"
					continue
				fi
			fi
		done
		#下一次循环
		start_date=`date -d " +1 day $m_end_date" +"%Y%m%d"`
	done;
fi

#./run.sh 20210601 20220810 /u/users/vn53xks/code/test.sql /u/users/vn53xks/code/test.log month 使用案例
#tailf /u/users/vn53xks/code/test.log  实时查看日志

#nohup bash run.sh 20211201 20220801 /u/users/vn53xks/code/test.sql /u/users/vn53xks/code/test.log month &  放入后台跑
#ps -ef | grep run.sh  查看脚本在后台的运行状态
#!/bin/bash

TZ='Asia/Shanghai'
export TZ
sql_file_1="dwd_item_sams_cbec_master_info.sql"
sql_file_2="dws_item_sams_cbec_sales_mid_di.sql"

# 获取当前日期
current_date=$(date +%Y-%m-%d)
# 减去一天得到前一天的日期
yestoday_str=$(date -d "${current_date} -1 day" +%Y-%m-%d)

while true
do
    now=$(date +%H)
    echo -e "现在是 $now 点" 
    
    if [ $now -ge 04 ]; then
        hive  -f  $sql_file_1  -hivevar yestoday_str=$yestoday_str
        if [ $? -eq 0 ];then
          echo "$yestoday_str  $sql_file_1    成功"
        else  
          echo "$yestoday_str  $sql_file_1    失败  重新回到while第一行运行"
          continue
         fi     
              
        hive  -f  $sql_file_2  -hivevar yestoday_str=$yestoday_str
        if [ $? -eq 0 ];then
          echo "$yestoday_str  $sql_file_2    成功"
            break
                  else  
          echo "$yestoday_str  $sql_file_2    失败  重新回到while第一行运行"
          continue  
          fi  
            
        else  
          echo "正在等待,60s 后继续检查当前时间。。。。。"
          # 否则,等待 120s 后再次检查时间
          sleep 120
        fi
done

exit 0
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值