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

本文永久更新链接地址

相关内容