首頁 >後端開發 >php教程 >php腳本守護程式原理與方法

php腳本守護程式原理與方法

墨辰丷
墨辰丷原創
2018-05-19 10:52:201200瀏覽

這篇文章主要介紹了php腳本守護進程原理與實現方法,較為詳細的分析了php腳本守護進程的實現思路、原理、格式及具體實現方法,需要的朋友可以參考下

思路:

1. while 循環,若目前沒有資料要操作可以休眠;
2. crontab 腳本每隔固定時間段執行該腳本,執行時先檢測是否已在執行,若無執行,有則跳過。
3. nohup  後台執行
4. flock -xn  加鎖

實例:

##要執行程式碼:index. php

<?php
set_time_limit(0);
//死循环
while(1) {
  $message = &#39;1111111&#39; . "\n";
  error_log($message);
  sleep(5);
}

#/tmp/lock/test1.lock 为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建
* * * * * flock -xn /tmp/lock/test1.lock -c &#39;nohup php index.php >> /php/test.log 2>&1 &&#39;
* * * * * flock -xn /tmp/mytest.lock -c &#39;php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log&#39;

在寫好的php腳本。為防止守護程式記憶體溢出,建議定期偵測記憶體佔用。

將以下程式碼放到業務腳本中:

if(memory_get_usage()>100*1024*1024){
  exit(&#39;内存溢出&#39;);//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端
}

注意:

nohup 任務檢視與關閉方法:

關閉:

#

//方法一:
ps -e | grep commend
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:   如果沒有立即獲得鎖定,等待指定時間
-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.log'

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

相關推薦:

PHP實作

腳本非同步執行的方法
##php-fpm服務啟動

腳本

步驟詳解php

腳本

定時更新商品清單

#

以上是php腳本守護程式原理與方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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