shell解決資源搶佔的問題以及調度無法對任務進行判定是否執行——讓任務job在所想時間段執行

shell解決資源搶佔的問題以及調度無法對任務進行判定是否執行

1.先來說說場景

我們有一個任務是分鐘級別spark任務,他啓動時無法知道前一次是否成功,然後就會不停的創建任務最後導致資源佔用;而且我們現在一套集羣,上面有分鐘級、小時級別、天級、隨機任務一起跑,無法做到分離。

 

 

2.來看一下基礎的shell開發

(1)shell的if

demo 接收一個參數
sh testif.sh 1
#! /bin/bash
set -e 
base=.
type=$1
if [ ! $type ]
then 
    echo "type is null"
elif [ $type -eq 0 ]
then
    echo "type is 0"
elif [ $type -eq 1 ] 
then
    echo "type is 1"
else
    echo "type is other"
fi

注意點:
1、每一個if 或者elif後面需要一個then
2、if 的條件判斷[]中的表達式必須和[或者]留有一個字符的寬度

(2)shell腳本中比較時間的代碼

#!/bin/bash

date1="180609"
date2="180610"

day=$(date "+%Y-%m-%d" -d "$date1 0 day")
echo $day

t1=`date -d "$date1" +%s`
t2=`date -d "$date2" +%s`

echo t1=$t1
echo t2=$t2

if [ $t1 -gt $t2 ]; then
    echo "$date1 > $date2"
elif [ $t1 -eq $t2 ]; then
    echo "$date1 == $date2"
else
    echo "$date1 < $date2"
fi

 

3.來看我寫的業務代碼

給入參數時間段做的事情。請注意,這裏我就學習了30分鐘shell,如果說代碼寫的不好請指出;沒有做參數校驗,那就自己用吧。

#!/bin/bash

# 該參數爲傳入的限定時間段
time_param1="$1"
time_param2="$2"
time_param3="$3"
time_param4="$4"


echo "參數列表============="
echo "第一次實時介入時間  : $time_param1"
echo "第一次實時停止時間  : $time_param2"
echo "第二次實時介入時間  : $time_param3"
echo "第二次實時結束時間  : $time_param4"
echo "----------------------"


# 系統當前時間,格式類型爲:2019-06-26 11:33:17
now_time=$(date +"%Y-%m-%d %H:%M:%S")
echo "得到系統當前時間爲:$now_time"


# 創建每天限定時間段
point_time1=$(date +"%Y-%m-%d $time_param1")
point_time2=$(date +"%Y-%m-%d $time_param2")
point_time3=$(date +"%Y-%m-%d $time_param3")
point_time4=$(date +"%Y-%m-%d $time_param4")
echo "時間區間-------==========------------"
echo "第一次實時介入時間  : $point_time1"
echo "第一次實時停止時間  : $point_time2"
echo "第二次實時介入時間  : $point_time3"
echo "第二次實時結束時間  : $point_time4"
echo "----------------------"


timestamp_now_time=`date -d "$now_time" +%s`
timestamp_point_time1=`date -d "$point_time1" +%s`
timestamp_point_time2=`date -d "$point_time2" +%s`
timestamp_point_time3=`date -d "$point_time3" +%s`
timestamp_point_time4=`date -d "$point_time4" +%s`
echo "----------------------"
echo "當前時間  : $timestamp_point_time"
echo "第一次實時介入時間  : $timestamp_point_time1"
echo "第一次實時停止時間  : $timestamp_point_time2"
echo "第二次實時介入時間  : $timestamp_point_time3"
echo "第二次實時結束時間  : $timestamp_point_time4"
echo "----------------------"

if [ $timestamp_now_time -ge $timestamp_point_time1 ] && [ $timestamp_now_time -le $timestamp_point_time2 ]; then
    echo "當前時間介於第一次任務放開時間    :   $point_time1  <   $now_time < $point_time2"
elif [ $timestamp_now_time -ge $timestamp_point_time3 ] && [ $timestamp_now_time -le $timestamp_point_time4 ]; then
    echo "當前任務開始第二次任務放開時間   :  $point_time3  <   $now_time < $point_time4 "
else
    echo "時間區間-------==========------------"
    echo "請注意,當前時間,不再任務接入時間範圍內,請注意!"
    echo "程序應該執行的時間段爲:"
    echo "時間區間-------==========------------"
    echo "當前時間介於第一次任務放開時間    :   $point_time1  <   $now_time < $point_time2"
    echo "當前任務開始第二次任務放開時間   :  $point_time3  <   $now_time < $point_time4 "
    echo "時間區間-------==========------------"
    echo "Do nothing."
    echo "Error:Exception:Exception has been found.job should closed."
    1=2
fi

 

可以看到,不用他做就讓他報錯即可。

azkaban自然會報錯。

輸出1=2

 

在此做版本迭代,記錄於此。

 

4.注意事項

       (1)看行號

         vim 之後  esc   set number

       (2)如果上傳.sh文件不行的話,注意修改一下文件的ff哦,不要忘記

      (3)請注意,shell腳本的if else需要有空格,不然會報錯的。

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章