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个人网站架设连环讲(二)
Oct 09 PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
在JavaScript中调用php程序
Mar 09 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
基于递归实现的php树形菜单代码
Nov 19 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
Sep 23 PHP
PHP实现json_decode不转义中文的方法
May 20 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
python Tornado框架的使用示例
2020/10/19 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
自荐信的两点禁忌
2013/10/30 职场文书
读书心得体会
2013/12/28 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
扬州个园导游词
2015/02/06 职场文书
工作收入证明模板
2015/06/12 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js
Python类方法总结讲解
2021/07/26 Python
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers