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 相关控件的事件操作分解
Aug 03 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
Aug 13 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
Node.js中使用socket创建私聊和公聊聊天室
Nov 19 Javascript
关于Javascript中defer和async的区别总结
Sep 20 Javascript
Node做中转服务器转发接口
Oct 18 Javascript
React组件中的this的具体使用
Feb 28 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
vue 实现v-for循环回来的数据动态绑定id
Nov 07 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
Mar 26 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
openflashchart 2.0 简单案例php版
2012/05/21 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
python操作oracle的完整教程分享
2018/01/30 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
Java基础面试题
2014/07/19 面试题
九州传奇上机题
2014/07/10 面试题
大学生开西餐厅创业计划书
2014/02/01 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
庆七一活动总结
2014/08/27 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
会计做账心得体会
2016/01/22 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
话题作文之自信作文
2019/11/15 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers