定时任务脚本

最近的项目用到了定时执行的一些东西,香港服务器,但没有用到linux里面的功能,所以自己写了一个按时执行的调度程序

# /bin/bash# whilerun.sh# writeby xingming on 2013年6月29日12:55:49# 常驻内存,循环执行脚本文件# 各参数含义介绍:# $1 为程序执行语句,将函数执行的参数等用引号引起来传进程序# $2 为待执行程序间隔执行时间,例 D1H2M3S4 代表一天两个小时三分钟四秒时间执行一次程序,香港虚拟主机,DHMS先后无关# $3 为开始执行待执行程序的日期# $4 为开始执行待执行程序的时间# 如果$3 $4 不传递,程序默认从现在当前时间开始执行# 执行案例如:bash whilerun.s20h1 20130629 140000# 解释:从2013年6月29日14时开始,间隔时间为1小时20秒,香港虚拟主机,执行程序test.sh# 如需后台执行,参考:bash -c > /dev/# $1 为程序执行语句,将函数执行的参数等用引号引起来传进程序# $2 为待执行程序间隔执行时间,例 D1H2M3S4 代表一天两个小时三分钟四秒时间执行一次程序,DHMS先后无关# $3 为开始执行待执行程序的日期# $4 为开始执行待执行程序的时间# 如果$3 $4 不传递,程序默认从现在当前时间开始执行# 执行案例如:bash whilerun.s20h1 20130629 140000# 解释:从2013年6月29日14时开始,间隔时间为1小时20秒,执行程序test.sh# 如需后台执行,参考:bash -c > /dev/null’ exitfi# 获取每次执行的间隔时间timestep=`echo $2 | awk ‘{))print -1;else{timespan = 0;)){timespan += substr($0,RSTART+1,RLENGTH-1);})){timespan += substr($0,RSTART+1,RLENGTH-1) * 60;})){timespan += substr($0,RSTART+1,RLENGTH-1) * 60 * 60;})){timespan += substr($0,RSTART+1,RLENGTH-1) * 60 * 60 * 24;}print timespan;}}[ $timestep -eq -$exitfi# 获取开始执行的时间if [ $# -ge 3 ] ; thendayspan=`date +%s -d $3 2> /dev/null`$dayspan == ] ; exitfitimespan=`timespan=0;hour = substr($1,1,2);mini = substr($1,3,2);sens = substr($1,5,2);if( length($1) != 6 || hour > 23 || hour < 0 ||mini > 59 || mini < 0 || sens > 59 || sens < 0)print -1;elseprint timespan;}[ $timespan -eq -exitfi((runtime=$dayspan+$timespan))elseruntime=${3:-`date +%s`}fisleeptime=`| bc`%Y-%m-%d %H:%M:%S# 如果开始执行时间在很久之前,需要将runtime变为当前时间之后while [ 0$runtime -lt `date +%s` ] ; do((runtime=$runtime+timestep))done# 开始执行while循环,检查程序执行时间while [ true ] ; do# 如果当前时间没有到达程序的执行时间,进入sleep状态while [ 0$runtime -gt `date +%s` ] ; dosleep $sleeptimedone# 在此处执行程序%Y-%m-%d %H:%M:%S$1((runtime=$runtime+$timestep))done# 如果程序正常执行,此处无法运行到exit力微休负重,言轻莫劝人。

定时任务脚本

相关文章:

你感兴趣的文章:

标签云: