php脚本守护进程原理与实现方法详解
本文实例讲述了php脚本守护进程原理与实现方法。分享给大家供大家参考,具体如下:
思路:
1.while循环,若当前没有数据要操作可以休眠;
2.crontab脚本每隔固定时间段执行该脚本,执行时先检测是否已在执行,若无执行,有则跳过。
3.nohup 后台执行
4.flock-xn 加锁
实例:
要执行代码:index.php
#/tmp/lock/test1.lock为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建 *****flock-xn/tmp/lock/test1.lock-c'nohupphpindex.php>>/php/test.log2>&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|grepcommend kill-9pid //方法二: fg%n//n为jobs命令查看的进程号查看:
//查看后台进程 jobs原理:
使用linuxflock文件锁实现任务锁定,解决冲突
格式:
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程序设计有所帮助。