这篇文章主要介绍了 php 计划任务之验证是否有多个进程调用同一个 job 的方法, 涉及 php 针对计划任务中进程调用的相关使用技巧, 具有一定参考借鉴价值, 需要的朋友可以参考下
本文实例讲述了 php 计划任务之验证是否有多个进程调用同一个 job 的方法分享给大家供大家参考, 具体如下:
在使用计划任务的时候, 公司有一次出现过 2 个进程跑同一个计划任务的情况, 导致很多 job 都执行了 2 次, 为了预防这种情况需要对 linux 的进程做一个限制, 同一时间如果有进程在调用这个计划任务, 那么就不允许另一个进程再进行调用了, 下面是具体的代码
- // $pro 方法名字
- private function _verifyPsAux($pro)
- {
- $arrProcess = array(
- $pro => "/usr/local/www/scrm/public/index.php /records/job/{$pro}"
- );
- $pidNumber = 0;
- foreach ($arrProcess as $key => $value) {
- exec("ps aux|grep'$key'", $return);
- $isRunning = false; // 指令未执行
- foreach ($return as $k => $v) {
- if(! strrpos($v, $value)) continue;
- // preg_match('/\d+:\d+ +\/usr/iu', $v, $match);
- // if (! isset($match[0])) continue;
- $isRunning = true;
- $pidNumber++;
- }
- // 如果当前进程存在, 则终止
- if ($isRunning && $pidNumber > 1) {
- echo '[_' . date('Y-m-d H:i:s') . "_] 进程正在执行中 \ n";
- exit();
- }
- }
- }
希望本文所述对大家 php 程序设计有所帮助
来源: https://www.php1.cn/detail/php-00ca802a99.html