思路:
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...