利用shell脚本实现计划任务功能

页面导航:首页 > 操作系统 > LINUX > 利用shell脚本实现计划任务功能

利用shell脚本实现计划任务功能

来源: 作者: 时间:2016-08-18 10:30 【

利用shell脚本实现计划任务功能一、mytask 实现功能:1、多任务并发执行,不会互相影响,采用锁机制避免单个任务的重叠执行。2、每个任务以单独脚本形式保存,相互独立。3、支持起
利用shell脚本实现计划任务功能
 
一、mytask 实现功能:
 
1、多任务并发执行,不会互相影响,采用锁机制避免单个任务的重叠执行。
2、每个任务以单独脚本形式保存,相互独立。
3、支持起始运行时间,如"2013/05/08"、"13:30"或“now”。并且支持给起始运行时间的修正值,比如"now+5m"表示当前时间的5分钟后执行(另外还实现了负数修正值,比如-1h,现在觉得这个功能挺无聊的)。
4、支持多种类型的运行周期设定,包括秒、分、时、天、周、月、年还有一次性任务。
5、会根据任务执行间隔,自动设定休眠时间,主程序占用资源极小。
6、任务可以是SHELL脚本,也可以是直接的linux命令。
7、独立的任务配置文件,集中定义任务内容、起始时间和运行间隔。(个人感觉比crontab的设定更直观)
8、支持运行时重载任务配置文件,无需重启主程序就可以将调整后的任务加入计划。
 
二、任务配置文件说明:
 
默认的任务配置文件为主程序目录下的mytask.conf
 
每一行配置对应一个计划任务,配置项之间以逗号分隔,任务配置定义如下:
<任务内容>,<起始运行时间>,<运行周期>
 
1、任务内容,可以是脚本文件、命令等。
要注意写全文件或命令的路径,可以使用全局变量$BASEDIR代表主程序所在目录。
复杂的命令建议保存在脚本文件中。
 
2、起始运行时间分两部分。
第一部分为初始时间,格式为"yyyy/MM/dd hh:mm:ss"也可以是时间值片断,例如:"2013/03/05"、"03/05"、“03/05 21:30”、"21:30"或当前时间"now"。
第二部分为修正时间,格式为"+时间单位"或“-时间单位”,意思为在初始时间的基础上做进一步的时间修正。
例如:"+5s"、"-10m"等。
时间的单位区别大小写,具体定义如下:
y=年、M=月、d=日、h=时、m=分、s=秒、w=星期
 
3、运行周期即为任务函数运行的间隔时间,取值与修正时间类似,只是取消了+-号,如果值为不带单位的0则表示只运行一次。
 
任务定义示例如下:
#在凌晨零点开始执行,每隔1天运行一次。
$BASEDIR/tasks/backdb.sh,00:00,1d
 
#在当前时间的2分钟后开始执行,每隔1个月运行一次。
$BASEDIR/tasks/test1.sh,now+2m,1M
 
#在5月12日14点30开始执行,每隔1小时运行一次。
/home/lykyl/sp.sh,5/12 14:30,1h
 
#在15:50点开始执行,每隔30秒运行一次。
$BASEDIR/tasks/test3.sh,15:50,30s
 
#启动即开始执行,每隔1分钟运行一次。
touch /tmp/ohyeah,now,1m
 
#在当前时间的1小时后开始执行,只运行一次。
$BASEDIR/tasks/test5.sh,now+1h,0
 
三、程序控制命令
 
1、启动
 
 nohup ./mytask.sh &
 
2、退出
 
kill -15 `cat ./mytask.pid`
 
3、运行时重新加载任务配置文件
 
kill -SIGUSR1 `cat ./mytask.pid`
 
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<