cron的一个疑问

:-}

crontab定时任务第一个周期未完成下一个周期执行就来了

现象

有一个定时任务,每分钟执行一次,前一分钟还没有执行完成,下一个分钟就来了,怎么解决。

模拟

#!/bin/bash

echo "开始 `date` " >> /lile/shell/ll.txt
sleep 70
echo "结束 `date` " >> /lile/shell/ll.txt



*/1 * * * * /bin/sh /lile/shell/test_cron.sh

解决

使用文件锁flock,使用文件锁的文件可以是任意文件

*/1 * * * * flock -xn /lile/shell/test_cron.sock -c '/bin/sh /lile/shell/test_cron.sh'

这样的话,当前一个任务没有执行完,后一个任务就来了的话,是不会执行的,会直到这个任务执行完成后,然后一个周期的时候再执行

flock常用参数(man flock)

-s:获取一个共享锁
-x :获得一个独占锁
-u:解除锁
-n:如果获取锁失败立即返回而不是等待
-w:如果获取锁失败等待的时间
-c:在shell中允许一个命令

你可以用队列形式设置定时任务,这样先来先执行后来后执行;或者弄个cron配置文件设置每个任务的依赖关系,比如你如果知道那个任务大概超出了间隔时间,就把它后面的任务与之设置成依赖关系,这样这个任务必须执行完后面的才执行。这样避免任务冲突!