定时器任务,在WEB应用比较常见,如何使用PHP实现定时器任务,大致有两种方案:
1)使用Crontab命令,写一个shell脚本,在脚本中调用PHP文件,然后定期执行该脚本;
2)配合使用ignore_user_abort()和set_time_limit(),使脚本脱离浏览器运行。前者是利用Linux的特性,和PHP本身没有多大关系,后者使用场景有限,且只能由一次HTTP请求触发该脚本,执行完后退出。那么我们如何使用纯PHP实现纯粹的定时器任务,且能适应认识任务业务需求?

基于cli模式运行,依赖php扩展 swoole

因该定时器支持毫秒,时间间隔较小,未来防止进程堆积,做了进程判断,进程存在就本次停止,等待下一次执行。


<?php
/**
* 基于swoole 毫秒定时器
* */ // 当前的运行环境是否是cli模式
function is_cli()
{
return preg_match("/cli/i", php_sapi_name()) ? true : false;
} /**
* 计划任务定时检测master进程是否存在,不存在则启动,以root用户运行
* shell基本命令
*(1)ps aux 显示系统全部进程,一行一个
*(2)grep “abc” 从标准输入读取字符流,输出包含字符串“abc”的行
*(3)grep -v "acb" 从标准输入读取字符流,输出不包含字符串“grep”的行
*(4)wc -l 从标准输入读取字符流,输出行数
*
* */
function checkMaster()
{
$cmd = 'ps axu | grep "consume" | grep -v "grep" | wc -l';
$ret = shell_exec("$cmd");
$ret = rtrim($ret, "\r\n");
echo "查看进程:".$ret."===". $cmd . "\n";
return $ret;
} if (is_cli()) { swoole_timer_tick(2000, function () { // 判定进程是否存在
$ret = checkMaster();
if ($ret === "0") { $start_master_cmd = "/usr/bin/php /var/www/html/cctv/Html/index.php /Home/TaskSi/consume.html >> /var/www/html/cctv/Runtime/Logs/huisu_si.log &"; $ret = shell_exec("$start_master_cmd");
// var_dump($ret);
echo '开启进程:' . $start_master_cmd . "\n==============================\n";
} else {
echo "进程已存在~~休息一下~~(".$ret.")\n==============================\n";
}
});
} else {
exit("非cli模式,已经停止执行!\n");
}

原文地址:https://segmentfault.com/a/1190000016457180

最新文章

  1. CSS基本知识1-CSS基本概念
  2. SQL AND & OR 运算符
  3. python装饰器示例
  4. 利用php的序列化和反序列化来做简单的数据本地存储
  5. jqueryGrid 内置的onclickSubmit afterSubmit
  6. Oracle > count(*) / count(0) / count(1) | order by 1, 2
  7. 07 - 删除vtkDataObject中的SetExtentTranslator 和 GetExtentTranslator方法 VTK 6.0 迁移
  8. 页面onclick()中传值问题
  9. 支持https的压力测试工具
  10. backbone入门小例子
  11. js 获取页面可视区域宽高
  12. java工程师联通XX面试题目
  13. C#代码生成工具:文本模板初体验 使用T4批量修改实体框架(Entity Framework)的类名
  14. html中的Flash对象
  15. WPF下可编辑Header的Tab控件实现
  16. ASP.NET Core原理概述
  17. "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
  18. Android艺术——Bitmap高效加载和缓存(1)
  19. spark优化参数调节和故障参数调节
  20. 【解决】Can't find default configuration "arch/x86/configs/xx_defconfig"!

热门文章

  1. pandas之cut(),qcut()
  2. 【codeforces 716D】Complete The Graph
  3. (0)资料官网【从零开始学Spring Boot】
  4. Ajax发送简单请求案例
  5. 0113针对大数据量SUM的优化-思路
  6. ASP.Net MVC – What are the uses of Display, DisplayName, DisplayFormat and ScaffoldColumn attributes
  7. HDFS学习笔记(1)初探HDFS
  8. java中文件路径读取
  9. ES 内存使用和GC指标——主节点每30秒会去检查其他节点的状态,如果任何节点的垃圾回收时间超过30秒(Garbage collection duration),则会导致主节点任务该节点脱离集群。
  10. 使用cxf3.0.4搭建webservice服务需要的最精简jar包