php指令碼守護程序原理與實現方法詳解

2022-09-28 19:03:10 字數 1523 閱讀 9271

思路:

1. while 迴圈,若當前沒有資料要操作可以休眠;

2. crontab 指令碼每隔固定時間段執行該指令碼,執行時先檢測是否已在執行,若無 執行,有則 跳過。

3. nohup  後台執行

4. flock -xn  加鎖

例項:要執行**:index.php

<?php set_time_limit(0);

//死迴圈

while(1)

#/tmp/lock/test1.lock 為當前程序要鎖定的檔案,不同的程序配置不同的鎖檔案,該檔案會自動建立

* * * * * flock -xn /tmp/loc程式設計客棧k/test1.lock -c 'nohup php index.php >> /php/test.log 2>&1 &'

* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'

在寫好的php指令碼。為防止守護程序記憶體溢位,建議定期檢測記憶體占用。

將以下**放到業務指令碼中:

if(memory_get_usage()>100*1024*1024)

注意:nohup 任務檢視與關閉方法:

關閉://方法一:

ps -e | grep commewww.cppcns.comnd

kill -9 pid

//方法二:

fg %n //n為jobs命令檢視的程序號

檢視://檢視後台程序

jobs

原理:使用linux flock 檔案鎖實現任務鎖定,解決衝突

格式:flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command

選項-s, --shared:    獲得乙個共享鎖

-x, --exclusive: 獲得乙個獨佔鎖

-u, --unlock:    移除乙個鎖,通常是不需要的,指令碼執行完會自動丟棄鎖

-n, --nonblock:  如果沒有立即獲得鎖,直接失敗而不是等待

-w, --timeout: &nbsdmjtlp; 如果沒有立即獲得鎖,等待指定時間

-o, --close:     在執行命令前關閉檔案的描述符號。用於如果命令產生子程序時會不受鎖的管控

-c, --command:   在shell中執行乙個單獨的命令

-h, --help       顯示幫助

-v, --version:   顯示版本

執行乙個php檔案,檔案鎖使用獨佔鎖,如果鎖定則失敗不等待。引數為-xn

* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.www.cppcns.comlog'

這樣當任務未執行完成,下一任務判斷到/tmp/mytest.lock被鎖定,則結束當前的任務,下一週期再判斷。

設定php指令碼為守護程序

建立test.php指令碼 usr bin php while true 守護程序命令 php test.php dev null dev nul是指指令碼輸出列印到空裝置,也就是不記錄,為後台執行模式 建立服務退出重啟指令碼 bin bash alive ps aux grep test.php ...

php 守護程序的實現

1 php沒有執行在安全模式,關掉安全模式,即 safe mode off 2 禁用函式列表 disable functions exec,system,shell exec,proc open,popen,一般來說,exec 這些函式為了安全,都會禁用,在php.ini裡面把這些禁用的函式放出來。...

守護程序之PHP實現

守護程序 daemon 是一種特殊的程序,它的生命週期很長,它在後台執行並且沒有控制終端 這樣可以保證守護程序不會接收到各種來自終端的訊號 比如 crontab sshd nginx等,都會使用守護程序的形式執行,確保可以一直正常的提供服務。daemon 守護程序 php實現 author zhjx...