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 相关文章推荐
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
Aug 24 Javascript
浅析js中取绝对值的2种方法
Jul 09 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
微信小程序 rich-text的使用方法
Aug 04 Javascript
VueCli3构建TS项目的方法步骤
Nov 07 Javascript
Vue-CLI 项目在pycharm中配置方法
Aug 30 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 Javascript
vue2.0实现列表数据增加和删除
Jun 17 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 21 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
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
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
解决WordPress使用CDN后博文无法评论的错误
2015/12/15 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python文件去除注释的方法
2015/05/25 Python
python随机取list中的元素方法
2018/04/08 Python
OpenCV 模板匹配
2019/07/10 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
pygame实现五子棋游戏
2019/10/29 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python连接mongodb集群方法详解
2020/02/13 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
晚宴邀请函范文
2014/01/15 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
实验教师岗位职责
2014/02/13 职场文书
卫生巾广告词
2014/03/18 职场文书
学校四风对照检查材料
2014/08/28 职场文书
代收款委托书范本
2014/10/01 职场文书
Python List remove()实例用法详解
2021/08/02 Python