php脚本守护进程原理与实现方法详解

 更新时间:2017年07月20日 08:55:51   作者:3wlog  
这篇文章主要介绍了php脚本守护进程原理与实现方法,较为详细的分析了php脚本守护进程的实现思路、原理、格式及具体实现方法,需要的朋友可以参考下

本文实例讲述了php脚本守护进程原理与实现方法。分享给大家供大家参考,具体如下:

思路:

1. while 循环,若当前没有数据要操作可以休眠;
2. crontab 脚本每隔固定时间段执行该脚本,执行时先检测是否已在执行,若无 执行,有则 跳过。
3. nohup  后台执行
4. flock -xn  加锁

实例:

要执行代码:index.php

<?php
set_time_limit(0);
//死循环
while(1) {
  $message = '1111111' . "\n";
  error_log($message);
  sleep(5);
}
#/tmp/lock/test1.lock 为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建
* * * * * flock -xn /tmp/lock/test1.lock -c 'nohup php index.php >> /php/test.log 2>&1 &'
* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'

在写好的php脚本。为防止守护进程内存溢出,建议定期检测内存占用。
将以下代码放到业务脚本中:

if(memory_get_usage()>100*1024*1024){
  exit('内存溢出');//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端
}

注意:

nohup 任务查看与关闭方法:

关闭:

//方法一:
ps -e | grep commend
kill -9 pid
//方法二:
fg %n  //n为jobs命令查看的进程号

查看:

//查看后台进程
jobs

原理:

使用linux flock 文件锁实现任务锁定,解决冲突

格式:

flock [-sxun][-w #] fd#
flock [-sxon][-w #] file [-c] command

选项

-s, --shared:    获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock:    移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock:  如果没有立即获得锁,直接失败而不是等待
-w, --timeout:   如果没有立即获得锁,等待指定时间
-o, --close:     在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command:   在shell中运行一个单独的命令
-h, --help       显示帮助
-V, --version:   显示版本

运行一个php文件,文件锁使用独占锁,如果锁定则失败不等待。参数为-xn

* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'

这样当任务未执行完成,下一任务判断到/tmp/mytest.lock被锁定,则结束当前的任务,下一周期再判断。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php获取今日开始时间和结束时间的方法

    php获取今日开始时间和结束时间的方法

    本篇文章实例讲述了php获取今日开始时间和结束时间的方法,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • php实现的css文件背景图片下载器代码

    php实现的css文件背景图片下载器代码

    这篇文章主要介绍了php实现的css文件背景图片下载器代码,涉及文件与URL地址的操作,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • PHP之十六个魔术方法详细介绍

    PHP之十六个魔术方法详细介绍

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。这里进行详细介绍,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • PHP根据两点间的经纬度计算距离

    PHP根据两点间的经纬度计算距离

    这篇文章主要介绍了PHP如何根据两点间的经纬度计算距离,代码很简单,但很实用,需要的朋友可以参考下
    2014-10-10
  • 用php实现像JSP,ASP里Application那样的全局变量

    用php实现像JSP,ASP里Application那样的全局变量

    用php实现像JSP,ASP里Application那样的全局变量...
    2007-01-01
  • 详解PHP的抽象类和抽象方法以及接口总结

    详解PHP的抽象类和抽象方法以及接口总结

    这篇文章主要介绍了PHP的抽象类和抽象方法以及接口总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • php数组遍历类与用法示例

    php数组遍历类与用法示例

    这篇文章主要介绍了php数组遍历类与用法,结合实例形式分析了php基于面向对象的数组遍历、读取操作封装与使用技巧,需要的朋友可以参考下
    2019-05-05
  • PHP遍历目录实现方法介绍

    PHP遍历目录实现方法介绍

    PHP中的目录遍历细说教程在编写PHP应用的过程当中,对指定目录的遍历、文件的筛选是在所难免也是至关重要的,PHP本身提供了解析和读取目录的强大方法
    2023-03-03
  • 浅谈使用PHP开发微信支付的流程

    浅谈使用PHP开发微信支付的流程

    本文是给大家简单的介绍了下php开发微信支付的整个流程,对大家了解熟悉使用php开发微信支付非常有帮助,有需要的小伙伴可以参考下。
    2015-10-10
  • JS操作XML中DTD介绍及使用方法分析

    JS操作XML中DTD介绍及使用方法分析

    这篇文章主要介绍了JS操作XML中DTD介绍及使用方法,结合实例形式分析了DTD概念、原理及校验xml文档的相关操作技巧,需要的朋友可以参考下
    2019-07-07

最新评论