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

时间: 2024-08-15 02:12:05

linux shell脚本调整任务计划的相关文章

Linux shell脚本--mysql全备计划任务

Linux下mysql的全备计划任务_shell小脚本,适用于数据量较小的mysql. #!/bin/bash PORT='5001' USER='admin' PASSWD='admin' SOCKED="/data/socket/mysql${PORT}.sock" BACKUP_FILE='/data/mysql/backup'  #注意磁盘空间情况 BACKUP_SAVE_DAYS='2' #删除N天之前的 CMD1='show databases;' Time=`date +

Linux Shell脚本攻略(1.10)

1.10 获取.设置日期和延时 很多应用程序需要以不同的格式打印日期.设置日期和时间.根据日期和时间执行某项操作.延时通常用于在程序执行过程中提供一段等待时间(比如1秒).同样的,我们也能够一多种格式打印日期,或者在命令行中设置日期.在类Unix系统中,日期被存储为一个整数,其大小为自世界标准时间起所流逝的秒数.这种计时方式称为纪元时或Unix时间. 1.10.1 获取.设置时间 以下的程序给出了多种用法: #!/bin/bash start=$(date +%s) #获取纪元时间 date #

Linux Shell脚本攻略(1.8)

1.8 使用别名 linux中的别名就相当于windows中的快捷方式,使用别名可以省去用户输入一长串命令序列的麻烦. 1.8.1 创建临时别名(快捷方式) alias new_command='command sequence' #格式说明 alias install='sudo apt-get install' #实例说明 在声明 install='sudo apt-get install'之后,就可以用install代替'sudo apt-get install'了.使用这种方式声明的别名

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu

Linux shell脚本流程控制

博主搬家至51CTO,初来乍到,请多指教. 此次我们来通过实例解析Linux shell脚本流程控制 Linux shell脚本流程控制可分为三类:顺序执行,条件选择执行,循环执行 顺序执行:简单理解就是逐行执行脚本内容,逐行解读,逐行执行.(此处不做实例解析) 条件选择执行:可以理解为先进行某一条件的判断选择,再决定执行怎样的脚本内容.常见语句if case 条件选择语句:if if语句用法: 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件

Linux shell脚本中shift的用法说明

Linux shell脚本中shift的用法说明 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本). 示例1:依次读取输入的参数并打印参数个数: run.sh: #!/bin/bash while [ $# != 0 ];do echo "第一个参数为:$1,参数个数为:$#" shift done 输入如下命令运行:run.sh a b c d e f 结果显示如下: 第一个参数为:a

Linux Shell脚本攻略(1.2)

1.2 终端打印 终端是交互式工具,用户可以通过它与shell环境进行交互.在终端中打印文本是大多数shell脚本和工具日常需要执行的基本任务.通过终端打印,人们可以知道系统的运行状态,这对用户来说是至关重要的. echo终端打印 echo "Welcome to Bash" echo 'Welcome to Bash' echo Welcome to Bash 以上三种方法的效果是一样的,输出内容都是"Welcome to Bash",并在末尾添加换行符.在默认情

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]