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