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获取mysql版本的几种方法小结
Mar 25 PHP
php session安全问题分析
Jun 24 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
javascript some()函数用法详解
Nov 13 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php使用Jpgraph绘制柱形图的方法
Jun 10 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
PHP设计模式之单例模式原理与实现方法分析
Apr 25 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
PHP代码加密的方法总结
Mar 13 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 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过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
js文字横向滚动特效
2015/11/11 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
详解Python爬虫的基本写法
2016/01/08 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
python selenium firefox使用详解
2019/02/26 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python 实现控制鼠标键盘
2020/11/27 Python
护理专业自荐信
2013/12/03 职场文书
向领导表决心的话
2014/03/11 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
python 批量压缩图片的脚本
2021/06/02 Python
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技