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 相关文章推荐
比较详细的关于javascript中void(0)的具体含义解释
Aug 02 Javascript
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
JavaScript中出现乱码的处理心得
Dec 24 Javascript
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
Sep 01 Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 Javascript
jQuery实现的在线答题功能
Apr 12 Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 Javascript
Javascript创建类和对象详解
May 31 Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 Javascript
vue el-table实现自定义表头
Dec 11 Javascript
深入了解JS之作用域和闭包
Jun 16 Javascript
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反弹shell实现代码
2009/04/22 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
Python类的基础入门知识
2008/11/24 Python
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python如何将两个txt文件内容合并
2019/10/18 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
快速创建python 虚拟环境
2020/11/28 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
运动会广播稿200字
2014/01/15 职场文书
单位提档介绍信
2014/01/17 职场文书
安全技术说明书
2014/05/09 职场文书
委托书如何写
2014/08/30 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
酒店辞职书范文
2015/02/26 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
LeetCode189轮转数组python示例
2022/08/05 Python