PHP守护进程实例


Posted in Javascript onMarch 06, 2015

php也是可以直接进行守护进程的启动与终止的,相对于shell来说会简单很多,理解更方便,当然了php的守护进程要实现自动重启还是要依赖于shell的crontab日程表,每隔一段时间去执行一次脚本看脚本是否需要重启,如果需要则杀掉进程删除RunFile文件,重新启动并在RunFile文件中写入pid。

<?php       

function start($file){

    $path = dirname(__FILE__).'/';

    $runfile = $path.$file.'.run';

    $diefile = $path.$file.'.die';

    $file = $path."data/{$file}.php";

    clearstatcache();

    if(file_exists($runfile)){

        $oldpid = file_get_contents($runfile);

        $nowpid = shell_exec("ps aux | grep 'php -f process.php' | grep ${oldpid} | awk '{print $2}'");

        //如果runfile中的pid号可以匹配到正在运行的,并且上次访问runfile的时间和现在相差小于5min则返回

        if(($oldpid == $nowpid) && (time() - fileatime($runfile) < 300)){

            echo "$file is circle runing no";

            return;

        }else{

            //pid号不匹配或者已经有300秒没有运行循环语句,直接杀掉进程,重新启动

            $pid = file_get_contents($runfile);

            shell_exec("ps aux | grep 'php -f process.php' | grep {$pid} | xargs --if-no-run-empty kill");

        }

    }else{

        //将文件pid写入run文件

        if(!($newpid = getmypid()) || !file_put_contents($runfile,$newpid)){

            return;

        }

        while(true){

            //收到结束进程新号,结束进程,并删除相关文件

            if(file_exists($diefile) && unlink($runfile) && unlink($diefile)){

                return;

            }

            /*这里是守护进程要做的事*/

            file_put_contents($file,"I'm Runing Now".PHP_EOL,FILE_APPEND);

            /***********************/

            touch($runfile);

            sleep(5);

        }

    }

}

start("test");

hp写守护进程时童谣要注意几点:

1.首先就是函数clearstatcache()函数那里,查官方手册可以知道该函数是清除文件状态缓存的,当在一个脚本中多次检查同一个文件的缓存状态时如果不用该函数就会出错,受该函数影响的有:stat(), lstat(), file_exists(), is_writable(),is_readable(), is_executable(), is_file(), is_dir(), is_link(),filectime(), fileatime(), filemtime(), fileinode(), filegroup(),fileowner(), filesize(), filetype(), fileperms().
2.在多次运行该脚本时,会在运行前进行检测,上次执行循环的时间距离现在大于300s或者pid号不匹配都会重启该进程(时间在每次执行循环式都要更新touch)。
3.自动重启也用到了crontab的日程表,将该文件添加入日程表:

crontab -e

#打开日程表,inset模式
*/3 * * * * /usr/bin/php -f process.php

#每3分钟执行一次,放置进程挂掉

这样就基本ok了,要是有具体功能的话还需改动代码。

Javascript 相关文章推荐
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 Javascript
js解决弹窗问题实现班级跳转DIV示例
Jan 06 Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 Javascript
javascript arguments使用示例
Dec 16 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
jquery validate.js表单验证入门实例(附源码)
Nov 10 Javascript
JQuery标签页效果实例详解
Dec 24 Javascript
js获取页面及个元素高度、宽度的代码
Apr 26 Javascript
微信小程序实现皮肤功能(夜间模式)
Jun 18 Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 jQuery
JavaScript操作Oracle数据库示例
Mar 06 #Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
Mar 05 #Javascript
jquery实现翻动fadeIn显示的方法
Mar 05 #Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 #Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
Mar 05 #Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 #Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 #Javascript
You might like
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
关于初学PHP时的知识积累总结
2013/06/07 PHP
解析php中curl_multi的应用
2013/07/17 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
AngularJs分页插件使用详解
2018/06/30 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
python daemon守护进程实现
2016/08/27 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
2019/06/13 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
劳资人员岗位职责
2013/12/19 职场文书
可贵的沉默教学反思
2014/02/06 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
自我检讨书范文
2015/01/28 职场文书
七一活动主持词
2015/06/29 职场文书
酒店宣传语大全
2015/07/13 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
导游词之崇武古城
2019/10/07 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python