诗和远方

Crontab避免周期内未执行完重复执行

Linux

如果某脚本要运行30分钟,可以在Crontab里把脚本间隔设为至少一小时来避免冲突。而比较糟的情况是可能该脚本在执行周期内没有完成,接着第二个脚本又开始运行了。如何确保只有一个脚本实例运行呢?一个好用的方法是利用lockf(FreeBSD 8.1下为lockf,CentOS 5.5下为flock),在脚本执行前先检测能否获取某个文件锁,以防止脚本运行冲突。

lockf的参数如下:

-k:一直等待获取文件锁。

-s:silent,不发出任何信息,即使拿不到文件锁。

-t seconds:设定timeout的时间是seconds秒,如果超过时间,则自动放弃。


flock -xn my.lock command

my.lock是一个文件,应该可以是任意文件,可以新建一个空文件。

当flock 获得锁后就会执行后面的 command


crontab示例:


30 23 * * * flock -xn /tmp/my.lock -c '/usr/local/php test.php'


*/5 * * * * /usr/bin/flock -xn /var/run/up_svn.lock -c'/scripts/up_svn.sh >/dev/null 2>&1'

*/5 * * * * flock -xn /tmp/my.lock -c 'sh /home/hadoop/nisj/love/task.sh'

Related
/var/log目录下的Linux日志文件功能2019年06月24日
索引节点inode2019年06月21日
Shell脚本实例2019年06月20日
GCC编译C程序2019年06月18日
Linux内核编译/内核数据结构/同步机制/信号量2019年06月14日
shell中的算术运算2019年06月14日
iptables2019年06月14日
7 个致命的 Linux 命令2019年06月14日

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:1995
  • 页面总数:1
  • 分类总数:17
  • 标签总数:515
  • 评论总数:0
  • 浏览总数:516418
Archives
Copyright © 2017-2019 www.my889.com Some Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号
Sitemap XML