crontab定时任务第一个周期未完成下一个周期执行就来了
有一个定时任务,每秒执行一次,前一秒还没有执行完成,下一个秒就来了,怎么解决。
vim test.sh
#!/bin/sh
echo "开始 `date` " >> /tmp/test.txt
sleep 10
echo "结束 `date` " >> /tmp/test.txt
crontab -e
* * * * * sleep 1;test.sh
输出结果:有多个执行脚本在运行
解决办法:
使用文件锁flock,使用文件锁的文件可以是任意文件
* * * * * sleep 1;flock -xn test.sock -c '/bin/sh test.sh'
这样的话,当前一个任务没有执行完,后一个任务就来了的话,是不会执行的,会直到这个任务执行完成后,然后一个周期的时候再执行
flock常用参数(man flock)
-s:获取一个共享锁
-x :获得一个独占锁
-u:解除锁
-n:如果获取锁失败立即返回而不是等待
-w:如果获取锁失败等待的时间
-c:在shell中允许一个命令