flock文件锁
linux中的定时任务crontab会定时执行一些脚本,但是脚本的时间往往无法控制,当脚本的执行时间过长,可能会导致上一次任务的脚本还没执行完,下一次任务的脚本又开始执行的问题。这种情况下会出现一些并发问题,严重时会导致出现脏数据或性能瓶颈的恶性循环。
通过使用flock建立排他锁可以规避这个问题
#!/bin/sh
echo "---------------------------"
echo "start at `date '+%Y-%m-%d %H:%M:%S'` ..."
sleep
echo "finished at `date '+%Y-%m-%d %H:%M:%S'` ..."
#crontab -e */ * * * * flock -xn /dev/shm/test.lock -c "sh /root/scripts/flock.sh >> /tmp/flock.log"
-x --exclusive 获得一个独占锁
-n --nonblock 如果没有立即获得锁,直接失败而不是等待
-c --command 在shell中运行一个单独的命令
flock.log输出:
---------------------------
start at -- :: ...
finished at -- :: ...
---------------------------
start at -- :: ...
finished at -- :: ...
---------------------------
start at -- :: ...
finished at -- :: ...
---------------------------
start at -- :: ...
finished at -- :: ...
观察日志定时任务还是以90秒一次在执行,而不是定时任务的每60秒执行一次
flock文件锁的更多相关文章
- linux使用flock文件锁解决crontab冲突问题
* * * * * flock -xn /dev/shm/redis.lock -c "/usr/local/bin/redis-server" 可以用flock命令,配合使用rs ...
- linux使用flock文件锁
使用linux flock 文件锁实现任务锁定,解决冲突 格式: flock [-sxun][-w #] fd# flock [-sxon][-w #] file [-c] command flock ...
- flock文件锁的学习和应用
flock文件锁 学习与应用 2016-9-20 作用: 可以使用flock文件锁,避免指定命令的同时执行.(实现任务锁定,解决冲突) 用法: # flock -xn /opt/lock_file ...
- php flock 文件锁
于php中文件锁函数flock函数用法简介,希望通过本文的介绍大家对于Linux方面能够更加的了解 flock (PHP 4, PHP 5) flock — 轻便的咨询文件锁定 说明 bool flo ...
- 使用linux flock文件锁实现任务锁定避免计划任务程序冲突
格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command选项-s, --shared: 获得一个共享锁 -x, --exclusi ...
- 关于flock文件锁的阻塞与非阻塞
阻塞模式,程序会一直等待. <?php $fp = fopen("lock.txt", "r"); if(flock($fp,LOCK_EX)) { // ...
- flock
为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态.作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争.假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有 ...
- [Linux] 服务器镜像定时备份解决方案 crontab+rsync+flock
两台服务器定时同步文件解决方案: 环境: 主机:192.168.1.1 镜像机:192.168.1.2 需要将主机内容备份至镜像机(假设用户都为root) 备份内容为 /export 目录下所有内容至 ...
- PHP中文件锁与进程锁的使用区别
php中文网的一篇文章,收为己用了.源地址: http://www.php.cn/php-weizijiaocheng-376853.html 本篇文章主要介绍了PHP 文件锁与进程锁的使用示例,小编 ...
随机推荐
- Spring配置文件没有提示问题+log4j
1.Spring中引入schema约束,把约束文件引入Myeclipse (1)复制约束路径http://www.springframework.org/schema/beans/spring-bea ...
- docker的卸载方法
卸载: 1.查询docker安装过的包: yum list installed | grep docker 2.删除安装包: yum remove docker-ce.x86_64 ddocker-c ...
- MyBatis总结与复习
Spring 主流框架 依赖注入容器/AOP实现 声明式事务 简化JAVAEE应用 粘合剂,将大家组装到一起 SpringMVC 1. 结构最清晰的MVC Model2实现 2. 高度可配置,支持 ...
- GitHub上易于高效开发的Android开源项目TOP20--适合新手
1. android-async-http android-async-http是Android上的一个异步.基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上. 2. an ...
- Google,真的要离我们而去吗?
Google,真的要离我们而去吗? 好怀念,真正要解决问题,还得搜google!
- 【extjs6学习笔记】0.4 准备: 书籍与文档
Ext JS 6 By Example Ext JS Essentials Learning Ext JS - Fourth Edition Ext JS 6: Getting Started htt ...
- linux下 ps命令日常
要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top ...
- elasticSearch 分布式安装
1.在elasticSearch下的config下elasticsearch.yml文件最后一行添加注意 一定要加空格在:后面http.cors.enabled: truehttp.cors.allo ...
- Localroast使用总结
全手打原创,转载请标明出处: https://www.cnblogs.com/dreamsqin/p/10883248.html,多谢~=.= 什么是Localroast 一个根据 JSON 文件快速 ...
- 2017.12.23 第二章 统一建模语言UML概述
第二章 统一建模语言UML概述 (1)为什么要建模 模型是某个事物的抽象,其目的是在构建这个事物之前先来理解它,因为模型忽略了那些非本质的细节,这样有利于更好的理解和表示事物: 在软件系统开发之前首先 ...