有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