Shell实现任务同步(_SUCCESS标志文件)

  |   0 评论   |   1,221 浏览

    在大数据的开发过程中经常需要判断前置任务是否完成,有几种常见的方案:

    • 通过调度系统,后置任务依赖前置任务;

    • 接口通知;

    • 通过同步标志位,即_SUCCESS文件

    即便在采用调度系统的任务当中,也有可能会有以下情况:

    • 前置任务不在调度系统中,如:与第三方系统交互;

    • 对前置任务做Check,虽然调度系统已经告诉你前置任务成功执行了,但仍然可能由于逻辑漏洞等原因,导致虽然显示任务成功,但中间步骤可能出错了;

    下面介绍一种通过检测_SUCCESS文件进行同步的方式

    #目录
    DOWNLOAD_DIR=/home/caixiaoyu/download
    #SUCCESS文件标志
    VERIFY_MARK=_SUCCESS
    #最大重试次数
    MAX_RETRY_TIMES=5
    LN=1
    while true
    do
      if [ -f ${DOWNLOAD_DIR}/${VERIFY_MARK} ]; then
        echo "${VERIFY_MARK}文件检查通过,共重试:${LN}次"
        break
      else
        echo "${VERIFY_MARK}文件没有生成,当前重试次数${LN}"
      fi
      if [ $LN -gt ${MAX_RETRY_TIMES} ]; then
        echo "超过最大重试次数${MAX_RETRY_TIMES}"
        exit 1
      fi
      sleep 5s
      ((LN++))
    done

    保存为1.sh,执行

    chmod +x 1.sh ;sh 1.sh 
    _SUCCESS文件没有生成,当前重试次数1
    _SUCCESS文件没有生成,当前重试次数2
    _SUCCESS文件没有生成,当前重试次数3
    _SUCCESS文件没有生成,当前重试次数4
    _SUCCESS文件没有生成,当前重试次数5
    _SUCCESS文件没有生成,当前重试次数6
    超过最大重试次数5

    _SUCCESS文件没有生成,就会一直重试

    假如_SUCCESS文件在某一时刻生成了,即退出循环

    touch download/_SUCCESS
    chmod +x 1.sh ;sh 1.sh 
    _SUCCESS文件没有生成,当前重试次数1
    _SUCCESS文件没有生成,当前重试次数2
    _SUCCESS文件检查通过,共重试:3次



    读后有收获可以支付宝请作者喝咖啡