我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP怎么限制定时任务的进程数量

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP怎么限制定时任务的进程数量

这篇文章主要介绍PHP怎么限制定时任务的进程数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

可能存在的问题

当我们处理大量数据的时候,脚本的执行时间可能很长,或者重复处理某条数据(写错的情况下)。

为了避免数据的重复处理、运行脚本过多导致服务器压力过大等问题,我们需要限制脚本的运行数量。

如何做

思路一

查询某种标识的进程数量,如果超过一定数量,则直接退出,不处理。

思路二

记录每次的PID,可以使用 文件、redis、memcached 等来存储。

当启动一个新进程的时候,去查一下这个标识下面有哪些PID,是否还在运行,且与当前标识有关系。

当超过一定数量的时候,直接退出,不处理。

实践

思路一实践

这里通过 linux 的 ps、grep、wc 的命令来获取指定标识的运行进程数。

<?phpfunction canRun($ident, $maxNum){  $cmd = sprintf('ps ax | grep %s | grep -v /bin/sh | grep -v grep | wc -l', $ident);  $fp = @popen($cmd, 'r');  $num = (int)trim(@fread($fp, 2096));  @pclose($fp);  return $num <= $maxNum;}

思路二实践

这里使用 redis 存储 pid 信息。

通过 /proc/{pid}/cmdline 文件检测指定进程是否还在运行。

<?phpfunction isSurvive($pid, $ident){  // 获取指定pid的cmdline文件  $cmdlinePath = sprintf('/proc/%s/cmdline', $pid);  if (!is_file($cmdlinePath)) {   return false;  }  $cmdline = trim(file_get_contents($cmdlinePath));  // 检查标识是否在 cmdline 中  return strpos($cmdline, $ident) !== false;}function canRun($ident, $maxNum){  // 假设已经链接上  $redisHandler = getRedis();  // 定义一个key  $key = sprintf('php:job:%s:pid', $ident);  // 当前的PID  $currentPid = getmypid();  // 将当前的PID写入redis  $redis->sAdd($key, $currentPid);  // 获取redis中的所有pid  $pids = $redis->sMembers($key);  // 遍历pid,检查是否有效  foreach ($pids as $index => $pid) {    if ($currentPid == $pid) {      continue;    }    // 检查 pid 是否还在运行中    if (isSurvive($pid, $ident)) {      continue;    }    // 若不再运行,则直接删除    unset($pids[$index]);    $redis->sRemove($key, $pid);  }  return count($pids) <= $maxNum;}

关于标识

关于标识,可能我们在运行一些定时脚本的时候,统一的部分可能就是 php 了;或者,拥有相同标识的脚本,我们要归为几类。

为了能够实现这些需求,我们可以通过 php 的内置函数 cli_set_process_title 来实现自定义 COMMAND。
demo.php:

这个时候,我们运行 demo.php,然后通过 ps ax 可以看到如下结果:

PID  USER   TIME COMMAND  1 root   0:09 php-fpm: master process (/usr/local/etc/php-fpm.conf)  7 root   0:16 php-fpm: pool www  8 root   0:15 php-fpm: pool www  9 root   0:14 php-fpm: pool www  10 root   0:00 sh 663 root   0:00 sh 690 root   0:00 {php} Job Demo 691 root   0:00 ps ax

修改指定脚本的进程标题,我们就可以实现定义某些脚本的标识了。

以上是“PHP怎么限制定时任务的进程数量”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP怎么限制定时任务的进程数量

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP怎么限制定时任务的进程数量

这篇文章主要介绍PHP怎么限制定时任务的进程数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!可能存在的问题当我们处理大量数据的时候,脚本的执行时间可能很长,或者重复处理某条数据(写错的情况下)。为了避免数据的重复处
2023-06-14

PHP怎么进行数字和字母的输入限制验证

本文小编为大家详细介绍“PHP怎么进行数字和字母的输入限制验证”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP怎么进行数字和字母的输入限制验证”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是输入限制?在
2023-07-05

云服务器限制流量吗怎么解除绑定的手机

首先,您可以尝试通过修改SYN和ACL的设置来解除限制流量。具体步骤如下:登录云服务器管理控制台,在“应用管理”栏中找到“SYN/ACL控制”,然后点击其下拉菜单,找到“解除所有流量限制”。在弹出的设置界面中,您可以修改流量限制级别、流量大小、最大流量等参数。您可以通过点击“修改”按钮来完成修改。在修改完成后,重新启动
2023-10-27

云服务器限制流量吗怎么解除绑定的账号

首先,如果您需要使用云服务器,并且已经在您的设备上绑定了设备,可以通过以下步骤解除绑定:进入云服务器管理界面:在您的设备上打开“控制面板”,点击“管理工具”。选择“服务和应用程序”:找到您的云服务器,点击其名称进入。找到“AmazonWebServices”:找到“AmazonWebServices”服务,右键单击并选
云服务器限制流量吗怎么解除绑定的账号
2023-10-28

云服务器限制流量吗怎么解除绑定的手机号

在手机设置中找到“流量与网络”选项。点击“流量与网络”,查看是否有任何选项可以让您解除绑定。如果没有选项,请单击“添加”按钮,将您的手机号码添加到该选项。单击“确认”按钮,完成解绑手机号的过程。在添加手机号码到云服务器之后,您可以在云服务器中访问您的手机号码。您可以在云服务器中选择需要访问的应用程序,然后在其配置页面中
云服务器限制流量吗怎么解除绑定的手机号
2023-10-27

C语言操作时间函数之怎么实现定时执行某个任务小程序

本篇内容主要讲解“C语言操作时间函数之怎么实现定时执行某个任务小程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言操作时间函数之怎么实现定时执行某个任务小程序”吧!时间概述由上图可知:1.
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录