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 连接mssql数据库 初学php笔记
Mar 01 PHP
PHP 可阅读随机字符串代码
May 26 PHP
php将时间差转换为字符串提示
Sep 07 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
php中stream(流)的用法
Mar 25 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 PHP
PHP+ajax分页实例简析
Dec 07 PHP
PHP开发中常用的十个代码样例
Feb 02 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
PHP利用curl发送HTTP请求的实例代码
Jul 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
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
基于jquery 的一个progressbar widge
2010/10/29 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
利用Python实现原创工具的Logo与Help
2018/12/03 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
母亲节感恩活动记录
2014/03/16 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
班主任评语大全
2014/04/26 职场文书
新农村建设汇报材料
2014/08/15 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
高中教师个人工作总结
2015/02/10 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
python实现简单的井字棋
2021/05/26 Python
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
PYTHON InceptionV3模型的复现详解
2022/05/06 Python