[日常] crontab的秒执行和串行化和多进程实现
2018-06-22 05:36:55来源:未知 阅读 ()
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脚本 , 阻塞在那里了.
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP定时任务延缓执行的实现 2020-03-04
- PHP中执行cmd命令的方法 2020-03-01
- thinkPHP框架中执行原生SQL语句的方法 2020-01-16
- php静态成员方法和静态的成员属性的使用方法 2019-12-14
- php 中英文语言转换的方法 2019-11-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash