• PHP守护进程


    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");

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

    crontab -e
    #打开日程表,inset模式
    
    */3 * * * * /usr/bin/php -f process.php
    #每3分钟执行一次,放置进程挂掉

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

    send me~

  • 相关阅读:
    转:页面Postback后定位滚动条不再难
    c:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config 行: 198
    WebService相关概念和原理(中间层)
    JS 根据DropDownList的Text选中某一项
    javascript事件列表解说
    AJAXUpdateProgress设置CSS元素POSITION的使动画居中 & loading的Info
    ASP.NET2.0 Skin+CSS 测试
    C# 日期格式转换(转)
    编写代码创建DataTable对象
    ToString 格式化数值
  • 原文地址:https://www.cnblogs.com/iforever/p/4117536.html
Copyright © 2020-2023  润新知