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


Posted in PHP onJuly 20, 2017

本文实例讲述了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获取post中的json数据的实现方法
Jun 08 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
PHP中常用的转义函数
Feb 28 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
PHP常用处理静态操作类
Apr 03 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 #PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 #PHP
ThinkPHP框架表单验证操作方法
Jul 19 #PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 #PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 #PHP
php实现的pdo公共类定义与用法示例
Jul 19 #PHP
PHP实现的Redis多库选择功能单例类
Jul 27 #PHP
You might like
PHP Mysql编程之高级技巧
2008/08/27 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
浅谈python数据类型及类型转换
2017/12/18 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
Python中的枚举类型示例介绍
2019/01/09 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
python如何将图片转换素描画
2020/09/08 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
自我鉴定标准格式
2014/03/19 职场文书
爽歪歪广告词
2014/03/20 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
婚内房产协议书范本
2014/10/02 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
2015年暑假工作总结
2015/07/13 职场文书
导游词之太原天龙山
2020/01/02 职场文书