一.引言
有一个线上任务需要在每 10 min内的 5min 后执行,例如 5:10、15:10 ...、55: 10,正常情况下需要查看 Clock Time,待时间到达 5min 后手动启动,下面实现随时启动脚本,定时在 x5:10 点执行。
二.实现
A.固定 5min 起,超时直接启动
#!/bin/bash
# min 模10获得 0-10 的分钟数
minute=`date "+%M"`
minute=$(($minute % 10))
echo $minute
second=`date "+%S"`
echo $minute $second
# x5:10 后启动,所以需判断时间 less than 5 即 lt
while [ $minute -lt 5 ]
do
minute=`date "+%M"`
minute=$(($minute % 10))
second=`date "+%S"`
echo $minute $second
sleep 1s # 不满足则 sleep 1s 继续判断
done
# 到达 x5 min 后,轮训判断 second,超过 10 后启动任务
while [ $minute -eq 5 ] && [ $second -lt 10 ]
do
second=`date "+%S"`
echo $minute $second
sleep 1s
done
echo "start"
当前场景下,如果用户再 0-5 min 期间启动脚本,脚本会自动延时至 5min10s 执行,如果 6-10 min 期间执行任务,则不等待直接启动任务。
54min 启动任务,任务会自动延时至 55min 10s 启动。
B.固定 5min 起,超时等待下一个 5min
#!/bin/bash
minute=`date "+%M"`
second=`date "+%S"`
echo $minute $second
echo "wait minute is 5 to start new application"
while [[ ! ( `echo $minute%5|bc` == 0 && `echo $minute%10|bc` != 0 && `echo $second*1|bc` -gt 10 ) ]] ;
do
minute=`date "+%M"`
second=`date "+%S"`
echo $minute $second
sleep 3s
done
echo start
当前场景下,严格要求启动时间为 5min 10s+,为了减少 CPU 压力,这里 sleep 3s,如果需要更细力度的时间控制,则可以修改为 sleep 1s 并修改 second 的 gt 条件即可。
54min 启动任务,任务会顺延至 55min12s 自动启动。