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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
javascript整除实现代码
Nov 23 Javascript
MultiSelect左右选择控件的设计与实现介绍
Jun 08 Javascript
JavaScript定时器详解及实例
Aug 01 Javascript
JavaScript中实现异步编程模式的4种方法
Sep 24 Javascript
浅谈javascript中onbeforeunload与onunload事件
Dec 10 Javascript
在Html中使用Requirejs进行模块化开发实例详解
Apr 15 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
Vue 进阶教程之v-model详解
May 06 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
使用Vue实现图片上传的三种方式
Jul 17 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
Apr 14 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读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
详谈nodejs异步编程
2014/12/04 NodeJs
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
如何将百度地图包装成Vue的组件的方法步骤
2019/02/12 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
Python列表解析操作实例总结
2020/02/26 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
python如何绘制疫情图
2020/09/16 Python
Python 操作 MySQL数据库
2020/09/18 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
上课说话检讨书大全
2014/01/22 职场文书
质检部经理岗位职责
2014/02/19 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
三八红旗集体先进事迹材料
2014/05/22 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书