首頁  >  文章  >  後端開發  >  PHP在Linux環境下如何守護後台程式

PHP在Linux環境下如何守護後台程式

零到壹度
零到壹度原創
2018-04-13 13:43:461541瀏覽

這篇文章給大家分享的內容是PHP在Linux環境下如何守護後台進程,有著一定的參考價值,有需要的朋友可以參考一下

應用場景

在某些情況下,我們需要持續的周期性的提供一些服務,例如監控記憶體或cpu的運行狀況,這些應用與客戶端是沒有關係的,不是說客戶端(如web介面,手機app等)關閉了,我們就不監控內存或cpu了,為了應對這種業務場景,後台守護進程就可以派上用場了。

所需環境

#Linux

實作方式

1. 準備php腳本

在/usr/local /src/目錄下,新建一個daemon.php腳本文件,內如如下:

  1. #
    <?php  
      
    Class Daemon{  
          
        /** 
         * 初始化一个守护进程 
         * @throws Exception 
         */  
        public function init(){  
            //创建一个子进程  
            $pid = pcntl_fork();  
              
            if ($pid == -1) {  
                throw new Exception(&#39;fork子进程失败&#39;);  
            } elseif ($pid > 0) {  
                //父进程退出,子进程变成孤儿进程被1号进程收养,进程脱离终端  
                exit(0);  
            }  
              
            //创建一个新的会话,脱离终端控制,更改子进程为组长进程  
            $sid = posix_setsid();  
            if ($sid == -1) {  
                throw new Exception(&#39;setsid fail&#39;);  
            }  
              
            //修改当前进程的工作目录,由于子进程会继承父进程的工作目录,修改工作目录以释放对父进程工作目录的占用。  
            chdir(&#39;/&#39;);  
              
            /** 
             * 通过上一步,我们创建了一个新的会话组长,进程组长,且脱离了终端,但是会话组长可以申请重新打开一个终端,为了避免 
             * 这种情况,我们再次创建一个子进程,并退出当前进程,这样运行的进程就不再是会话组长。 
             */  
            $pid = pcntl_fork();  
            if ($pid == -1) {  
                throw new Exception(&#39;fork子进程失败&#39;);  
            } elseif ($pid > 0) {  
                //再一次退出父进程,子进程成为最终的守护进程  
                exit(0);  
            }  
            //由于守护进程用不到标准输入输出,关闭标准输入,输出,错误输出描述符  
            fclose(STDIN);  
            fclose(STDOUT);  
            fclose(STDERR);  
        }  
    }  
      
    $daemon = new Daemon();  
    $daemon->init();  
      
    //处理业务代码  
    while(true) {  
        file_put_contents(&#39;/usr/local/src/log.txt&#39;, time().PHP_EOL, FILE_APPEND);  
        sleep(5);  
    }

##該腳本的作用,就是每隔5秒,向日誌檔案中寫入時間戳,當然,這個只是一個簡單的範例,具體應用中,我們還需要根據業務的不同,編寫具體的業務處理程式碼。

2. 以後台方式執行php腳本

#在命令列下,輸入:

    nohup php /usr/local/src/daemon.php &

3. 查看日誌輸出

在命令列下,輸入:

tail -f /usr/local/src/log.txt

    我們將會看到以下訊息:

4. 關閉php後台程序

#首先,我們要查出該行程的PID,指令:

    ps -ef | grep "php /usr/local/src/daemon.php"

然後,透過這個PID把該行程kill掉#

  1. kill -9 22767  

#其中,22767就是php後台程序的PID號。

5. 開機自啟動

透過前面的步驟,我們知道如何開啟和關閉一個php進程,但是,在實際的應用中,我們不可能每次都是手動開啟,這樣我們就會損失掉一部分業務數據,所以我們必須要讓該進程開機自動運行,步驟如下:

##在/etc/rc.local檔案中,將nohup php /usr/local/src/daemon.php &這個指令加入即可。


#

以上是PHP在Linux環境下如何守護後台程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn