定时器任务,在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");

}

php不重复随机加时间毫秒,PHP实现的毫秒定时器,同时解决进程不重复堆积相关推荐

  1. java 时间生成字符串_java随机生成时间字符串的方法

    本文实例为大家分享了java随机生成时间字符串的具体代码,供大家参考,具体内容如下 package com.wechat.utils; import java.text.SimpleDateForma ...

  2. 论文阅读:2010-基于随机加工时间和模糊交货期的加工车间调度问题

    1.车间调度问题研究发展 由于确定加工车间调度问题偏于理想化,对于模型假设过多,在实际应用 过程中会遇到很多问题.因此人们开始尝试对模型进行一些修改或者拓展, 使之更符合实际生产要求.目前,在确定加工 ...

  3. JS代码实例:实现随机加载不同的CSS样式

    如果让网页浏览者每次打开页面都有新的感觉,可以通过替换css样式来处理.下面来介绍一下. 随机载入CSS样式的JS效果实际上很好实现,本文的代码如下,具体思路是用一个默认的CSS样式:default. ...

  4. oracle产生随机日期,Oracle生成随机日期时间

    一.生成随机日期 例如,生成一个2015年内的任意日期: /* * 分析:2015年内的任意日期,即日期范围是(2015-01-01, 2015-12-31) * 可以转化为 2015-01-01 + ...

  5. MySQL中使用adddate函数产生随机日期+时间

    使用adddate函数和rand()函数生成随机日期+时间的好处在于不会出现2月份有30天的问题,日期函数帮你处理.下面是SQL代码: SELECT ADDDATE(ADDDATE(ADDDATE(A ...

  6. CAD/CASS依据等高线等距或随机加高程点插件(等高线等距加高程点、等高线随机加高程点、等高线手动加高程点)

    插件下载: QTools for AutoCADhttp://qtools.ysepan.com/ 使用方法: APPLOAD命令加载插件,dgx命令打开等高线工具(包含以下功能:修等高线.等高线升降 ...

  7. oracle 生成随机姓名_Oracle生成随机日期时间

    一.生成随机日期 例如,生成一个2015年内的任意日期: /* * 分析:2015年内的任意日期,即日期范围是(2015-01-01, 2015-12-31) * 可以转化为 2015-01-01 + ...

  8. mysql:日期加时间

    基础语法: select date_add(字段, interval 1 day); select date_add(字段, interval 1 hour); select date_add(字段, ...

  9. 10以内随机加、减法练习题

    (一)10以内加法练习题 (二)10以内减法练习题 (三)10以内随机加.减法练习题 文章目录 前言 一.导入库 二.编写脚本 1.生成10以内随机加减法 2.将公式写入excel表 3.设置exce ...

最新文章

  1. Excel如何设置单元格行高,办公入门
  2. 2021年春季学期-信号与系统-第十次作业参考答案
  3. C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表
  4. D. Multiset(树状数组 + 二分)
  5. 7-174 两个有序链表序列的合并 (20 分)
  6. 如何手动添加或者修改海威康视摄像头IP地址的方法
  7. 2008新建域时失败问题
  8. 【JVM技术专题】 深入学习Parallel Scavenge回收器「 原理篇」
  9. 基于JAVA体育用品购物系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  10. 调试程序基本步骤方法
  11. PTA实验3-1 求一元二次方程的根 (20 分)
  12. [Swift]LeetCode855. 考场就座 | Exam Room
  13. (61)Verilog生成vcd波形文件
  14. 计算机主机内部结构连接,OPS电脑与显示器之间的连接结构的制作方法
  15. React 入门(一)
  16. U-App 升级剧透,你不抢个内测账号?
  17. SRPG Studio学习笔记
  18. [PCIE703]FPGA实时处理器-XCKU060+ARM(华为海思视频处理器-HI3531DV200)高性能综合视频图像处理平台设计资料及原理图分享
  19. Android常用加密手段之MD5加密(字符串加密和文件加密)
  20. 【时事摘抄】上调电价的主意太馊了

热门文章

  1. XML序列化以及新增节点XMLHelper
  2. 计算机视觉专业术语总结:构建计算机视觉的知识体系
  3. 从硬件角度看,无人车商业化落地难点
  4. CVPR 2020 | 更高质量的点云补全:上海交通大学团队提出点云分形网络
  5. java opencv4.40图片实现人脸识别(2)
  6. dom 元素拖拽实现
  7. Pymol BioPython | PDB文件中氨基酸序列的提取
  8. WOJ 1204 继续找相同
  9. 哪个术语描述了服务器软件在专用计算机,计算机网络基础
  10. NCBI|转录组原始数据上传