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执行速率优化技巧小结
Mar 15 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
PHP 事件机制(2)
Mar 23 PHP
使用phpQuery采集网页的方法
Nov 13 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
smarty模板引擎基础知识入门
Mar 30 PHP
php将金额数字转化为中文大写
Jul 09 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
php新建文件的方法实例
Sep 26 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 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多进程编程实例详解
Jul 19 #PHP
You might like
239军机修复记
2021/03/02 无线电
php5数字型字符串加解密代码
2008/04/24 PHP
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
如何在php中正确的使用json
2013/08/06 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
PHP线程的内存回收问题
2016/07/08 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
原生JS实现留言板
2020/03/26 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
python计算日期之间的放假日期
2018/06/05 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python算的上脚本语言吗
2020/06/22 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
毕业生求职简历中的自我评价
2013/10/18 职场文书
社团成立邀请函
2014/01/08 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang