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 相关文章推荐
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
php curl_init函数用法
Jan 31 PHP
php判断页面是否是微信打开的示例(微信打开网页)
Apr 25 PHP
常见php数据文件缓存类汇总
Dec 05 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
隐性调用php程序的方法
Jun 13 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
php版微信js-sdk支付接口类用法示例
Oct 12 PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
php适配器模式简单应用示例
2019/10/23 PHP
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
3分钟掌握常用的JS操作JSON方法总结
2017/04/25 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
Python实现的检测网站挂马程序
2014/11/30 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Python如何读写二进制数组数据
2020/08/01 Python
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
欧洲最大的品牌水上运动服装和设备在线零售商:Wuituit Outlet
2018/05/05 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
求高于平均分的学生学号及成绩
2016/09/01 面试题
英文版餐饮业求职信
2013/10/18 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
竞选部长演讲稿
2014/04/26 职场文书
教师考核材料
2014/05/21 职场文书
个人职业及收入证明
2014/10/13 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书