php不重复随机加时间毫秒,PHP实现的毫秒定时器,同时解决进程不重复堆积
定时器任务,在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实现的毫秒定时器,同时解决进程不重复堆积相关推荐
- java 时间生成字符串_java随机生成时间字符串的方法
本文实例为大家分享了java随机生成时间字符串的具体代码,供大家参考,具体内容如下 package com.wechat.utils; import java.text.SimpleDateForma ...
- 论文阅读:2010-基于随机加工时间和模糊交货期的加工车间调度问题
1.车间调度问题研究发展 由于确定加工车间调度问题偏于理想化,对于模型假设过多,在实际应用 过程中会遇到很多问题.因此人们开始尝试对模型进行一些修改或者拓展, 使之更符合实际生产要求.目前,在确定加工 ...
- JS代码实例:实现随机加载不同的CSS样式
如果让网页浏览者每次打开页面都有新的感觉,可以通过替换css样式来处理.下面来介绍一下. 随机载入CSS样式的JS效果实际上很好实现,本文的代码如下,具体思路是用一个默认的CSS样式:default. ...
- oracle产生随机日期,Oracle生成随机日期时间
一.生成随机日期 例如,生成一个2015年内的任意日期: /* * 分析:2015年内的任意日期,即日期范围是(2015-01-01, 2015-12-31) * 可以转化为 2015-01-01 + ...
- MySQL中使用adddate函数产生随机日期+时间
使用adddate函数和rand()函数生成随机日期+时间的好处在于不会出现2月份有30天的问题,日期函数帮你处理.下面是SQL代码: SELECT ADDDATE(ADDDATE(ADDDATE(A ...
- CAD/CASS依据等高线等距或随机加高程点插件(等高线等距加高程点、等高线随机加高程点、等高线手动加高程点)
插件下载: QTools for AutoCADhttp://qtools.ysepan.com/ 使用方法: APPLOAD命令加载插件,dgx命令打开等高线工具(包含以下功能:修等高线.等高线升降 ...
- oracle 生成随机姓名_Oracle生成随机日期时间
一.生成随机日期 例如,生成一个2015年内的任意日期: /* * 分析:2015年内的任意日期,即日期范围是(2015-01-01, 2015-12-31) * 可以转化为 2015-01-01 + ...
- mysql:日期加时间
基础语法: select date_add(字段, interval 1 day); select date_add(字段, interval 1 hour); select date_add(字段, ...
- 10以内随机加、减法练习题
(一)10以内加法练习题 (二)10以内减法练习题 (三)10以内随机加.减法练习题 文章目录 前言 一.导入库 二.编写脚本 1.生成10以内随机加减法 2.将公式写入excel表 3.设置exce ...
最新文章
- Excel如何设置单元格行高,办公入门
- 2021年春季学期-信号与系统-第十次作业参考答案
- C语言数据结构(大话数据结构——笔记1)数据结构绪论、算法、线性表
- D. Multiset(树状数组 + 二分)
- 7-174 两个有序链表序列的合并 (20 分)
- 如何手动添加或者修改海威康视摄像头IP地址的方法
- 2008新建域时失败问题
- 【JVM技术专题】 深入学习Parallel Scavenge回收器「 原理篇」
- 基于JAVA体育用品购物系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 调试程序基本步骤方法
- PTA实验3-1 求一元二次方程的根 (20 分)
- [Swift]LeetCode855. 考场就座 | Exam Room
- (61)Verilog生成vcd波形文件
- 计算机主机内部结构连接,OPS电脑与显示器之间的连接结构的制作方法
- React 入门(一)
- U-App 升级剧透,你不抢个内测账号?
- SRPG Studio学习笔记
- [PCIE703]FPGA实时处理器-XCKU060+ARM(华为海思视频处理器-HI3531DV200)高性能综合视频图像处理平台设计资料及原理图分享
- Android常用加密手段之MD5加密(字符串加密和文件加密)
- 【时事摘抄】上调电价的主意太馊了