歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Linux shell腳本調整任務計劃

有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

Copyright © Linux教程網 All Rights Reserved