首頁 > 軟體

Linux shell指令碼調整任務計劃

2020-06-16 17:51:26

有2個指令碼,每天跑任務計劃的

dts_rsync.sh 負責下載線上備份的sql檔案

dts_input.sh 負責將下載好的備份檔案匯入到本地MySQL

現在遇到一個問題,就是下載備份檔案的完成時間不固定。以前是晚上6點下載完成,現在是7點才能完成,以後可能會增加。

下載紀錄檔如下:

2015-10-15 0:10:01 開始傳輸

2015-10-15 7:19:35 傳輸完成

任務計劃如下:

#同步express的備份

10 0 * * * /opt/dts_rsync.sh &

#匯入備份檔案

01 7 * * * /opt/dts_input.sh &

那麼需要的做的就是提取下載完成時間,然後將匯入備份檔案時間中的小時部分增加1小時。

由於shell無法直接編輯任務計劃。

可以將任務計劃內容寫入到一個txt檔案,然後使用命令將txt的內容覆蓋至任務計劃

命令如下:

/usr/bin/crontab /opt/cron.txt

完整的shell指令碼cron如下:

#!/bin/bash

echo "#######################" >> /opt/cron.log

#記錄執行時間

statime=`date +%Y-%m-%d" "%H:%M:%S`

echo "$statime"  >> /opt/cron.log

#任務計劃開始時間,提取小時

a=`cat /opt/cron.txt | grep dts_input.sh | awk '{print $2}'`

#傳輸完成時間,提取小時

b=`tail -1 /tmp/dts_message.log | awk '{print $2}' | cut -d ":" -f 1`

echo "任務計劃開始時間$a" >> /opt/cron.log

echo "傳輸完成時間$b" >> /opt/cron.log

#判斷傳輸完成時間是否大於等於任務計劃時間

if [ $b -ge $a ];then

#增加1個小時

c=`/usr/bin/expr $a + 1`

#修改任務計劃檔案

/bin/sed -i "s/$a/$c/g" /opt/cron.txt

#覆蓋任務計劃

/usr/bin/crontab /opt/cron.txt

echo "任務計劃開始時間狀態ERROR,變更小時為$c" >> /opt/cron.log

else

echo "任務計劃開始時間狀態OK,小時是$a" >> /opt/cron.log

fi

cron.txt內容如下:

#同步express的備份

10 0 * * * /opt/dts_rsync.sh &

#匯入備份檔案

01 7 * * * /opt/dts_input.sh &

#檢查下載時間

01 */1 * * * /opt/cron.sh

#每週日清空紀錄檔記錄

01 23 * * 0 /opt/clean_log.sh

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-10/124180.htm


IT145.com E-mail:sddin#qq.com