[日常] crontab的秒执行和串行化和多进程实现
2023-02-18 15:41:31 时间
1. crontab的最低运行频率是,按照每分钟执行一次,通过在脚本中简单实现按秒级别运行
比如这条cron规则 , 每分钟执行一次脚本
* * * * * php /var/www/html/test/cron.php
cron.php
$i=0; while(1){ $i++; if($i>60) break; $pid=getmypid(); //查询队列等任务 file_put_contents("/tmp/cron_test","{$pid}=={$i}\n",FILE_APPEND); sleep(1); }
不停顿,每秒执行一次,前面的数字是当前的进程id,可以看到进程更换了
2. 两个进程同时每秒执行,只需要改下数字60改成120
<?php $i=0; while(1){ $i++; if($i>120) break; $pid=getmypid(); //查询队列等任务 file_put_contents("/tmp/cron_test","{$pid}=={$i}\n",FILE_APPEND); sleep(1); }
3.处理crontab冲突 , 同一时间只允许一个任务执行 , 使用flock文件锁
如果一个任务超过了一分钟没执行完 , 下个任务开启时会检测文件是否已经被加了锁 , 如果加锁失败就不执行脚本了
默认使用阻塞模式,就是其他进程会一直等待这个文件释放锁,释放后就立即执行
* * * * * flock -xn /tmp/mycron.lock -c 'php /var/www/html/test/cron.php'
将命令作为 flock 的 -c 选项的参数。flock 命令中,-x 表示对文件加上排他锁,-c 选项指明加锁成功后要执行的命令。
模拟脚本超时
<?php $i=0; while(1){ $i++; //模拟进程耗时长 if($i>rand(60,130)) break; $pid=getmypid(); //查询队列等任务 file_put_contents("/tmp/cron_test","{$pid}=={$i}\n",FILE_APPEND); sleep(1); }
下面的截图可以看到 , 第二个进程执行到了flock命令 , 但是没有执行到php脚本 , 阻塞在那里了.
相关文章
- 虚拟机研究系列-「GC本质底层机制」SafePoint的深入分析和底层原理探究指南
- 👊 Spring技术原理系列(7)带你看看那些可能你还不知道的Spring特性技巧哦!
- 【日志技术专题】「logback入门到精通」彻彻底底带你学会logback框架的使用和原理(入门介绍篇)
- MySQL技术专题(X)该换换你的数据库版本了,让我们一同迎接8.0的到来哦!(初探篇)
- Zookeeper原理系列-Paxos协议的原理和Zookeeper中的应用分析
- 【Spring技术原理】Aspectj和LoadTimeWeaving的动态代理技术实现指南
- 【SpringBoot技术专题】「权限校验专区」Shiro整合JWT授权和认证实现
- 👊 Spring技术原理系列-从零开始教你SpringEL表达式使用和功能分析讲解指南(上篇)
- Mybatis-技术专区-Criteria的and和or进行联合条件查询
- SpringBoot-技术专区-教你如何开发一个”可移植“的轻量级文件服务项目系统!
- 🏆【算法数据结构专题】「限流算法专项」带你认识常用的限流算法的技术指南(分析篇)
- 【优化技术专题】「温故而知新」基于Quartz系列的任务调度框架的动态化任务实现分析
- MySQL-技术专题-MySQL主从架构以及[半同步机制]模式大全
- 🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(5)总结归纳Jenkins的安装使用和配置流程介绍
- 优化技术专题-线程间的高性能消息框架-深入浅出Disruptor的使用和原理
- 🏆【Alibaba工具型技术系列】「EasyExcel技术专题」摒除OOM!让你的Excel操作变得更加优雅和安全
- Redis-技术专区-让你彻底会使用“Redis中最陌生且最强大的集合”(ZSET)【前篇】
- 分布式技术专题-分布式协议算法-带你彻底认识Paxos算法、Zab协议和Raft协议的原理和本质
- Redis-技术专区-帮从底层彻底吃透AOF技术原理
- 史上最详细的Windows10系统离线安装.NET Framework 3.5的方法(附离线安装包下载)