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实现生成HTML静态页面

    使用PHP实现生成HTML静态页面

    在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板、缓存等实现页面静态化,今天就以PHP实例教程形式讨论PHP生成静态页面的方法。
    2015-11-11
  • PHP+MySQL之Insert Into数据插入用法分析

    PHP+MySQL之Insert Into数据插入用法分析

    这篇文章主要介绍了PHP+MySQL之Insert Into数据插入用法,实例分析了php+mysql基于Insert Into语句实现数据插入的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • php adodb连接mssql解决乱码问题

    php adodb连接mssql解决乱码问题

    php程序是utf-8的,sqlserver是2005中文,内码是gb18030. 普通的mssql_connect无法设置内码转换,读出来的数据在utf-8页面显示乱码。
    2009-06-06
  • php数组合并array_merge()函数使用注意事项

    php数组合并array_merge()函数使用注意事项

    array_merge()函数在php中是对数组进行合并的,可以把多个数组合成一个数组,并且不改变原数组(www.111cn.net)的值了,但今天我在使用array_merge合并数组时碰到几个小细节上的问题,下面我举例子给各位朋友看看
    2014-06-06
  • ueditor 1.2.6 使用方法说明

    ueditor 1.2.6 使用方法说明

    以下文本是以php版本为例的,对ueditor 1.2.6的使用方法进行了详细的说明介绍,需要的朋友可以过来参考下
    2013-07-07
  • WordPress中自定义后台管理界面配色方案的小技巧

    WordPress中自定义后台管理界面配色方案的小技巧

    这篇文章主要介绍了WordPress中自定义后台管理界面配色方案的小技巧,即使用wp_admin_css_color()函数来添加配色,需要的朋友可以参考下
    2015-12-12
  • PHP5多态性与动态绑定介绍

    PHP5多态性与动态绑定介绍

    这篇文章主要介绍了PHP5多态性与动态绑定介绍,本文主要讲解了什么是多态性和什么是动态绑定,并给出相应实例,需要的朋友可以参考下
    2015-04-04
  • php获取本周星期一具体日期的方法

    php获取本周星期一具体日期的方法

    这篇文章主要介绍了php获取本周星期一具体日期的方法,涉及php针对日期的操作技巧,非常具有实用价值,感兴趣的朋友可将该代码片段整合进自己的日期类中以方便日后调用,需要的朋友可以参考下
    2015-04-04
  • PHP实现字符串大小写转函数的功能实例

    PHP实现字符串大小写转函数的功能实例

    这篇文章主要给大家介绍了关于利用PHP如何实现字符串大小写转函数功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友一起来看看啊
    2019-02-02
  • javascript+php实现根据用户时区显示当地时间的方法

    javascript+php实现根据用户时区显示当地时间的方法

    这篇文章主要介绍了javascript+php实现根据用户时区显示当地时间的方法,实例分析javascript获取客户端时区及与服务器端php交互的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论