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 xml文件操作代码(一)
Mar 20 PHP
php 文件上传系统手记
Oct 26 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
深入array multisort排序原理的详解
Jun 18 PHP
php输入流php://input使用浅析
Sep 02 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP PDOStatement::fetchObject讲解
Feb 01 PHP
Yii框架函数简单用法分析
Sep 09 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
提升PHP执行速度全攻略(上)
2006/10/09 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
vue使用echarts实现水平柱形图实例
2020/09/09 Javascript
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Django操作session 的方法
2020/03/09 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
大学生工作推荐信范文
2013/12/02 职场文书
员工工作表扬信范文
2014/01/13 职场文书
租房协议书
2014/04/10 职场文书
技术负责人岗位职责
2015/02/10 职场文书
入党积极分子个人总结
2015/03/02 职场文书
养成教育主题班会
2015/08/13 职场文书
python本地文件服务器实例教程
2021/05/02 Python