簡體   English   中英

如何讓PHP腳本永遠與Cron Job一起運行?

[英]How can I make a php script to run forever with Cron Job?

<?php
 while(true){
 //code goes here.....
 }
  ?>

我想制作一個PHP Web服務器,那么如何使用Curl使這個腳本永遠運行?

不要忘記將最大執行時間設置為無限(0)。

如果這是您的意圖,請更好地確保您不會運行多個實例:

ignore_user_abort(true);//if caller closes the connection (if initiating with cURL from another PHP, this allows you to end the calling PHP script without ending this one)
set_time_limit(0);

$hLock=fopen(__FILE__.".lock", "w+");
if(!flock($hLock, LOCK_EX | LOCK_NB))
    die("Already running. Exiting...");

while(true)
{

    //avoid CPU exhaustion, adjust as necessary
    usleep(2000);//0.002 seconds
}

flock($hLock, LOCK_UN);
fclose($hLock);
unlink(__FILE__.".lock");

如果在CLI模式下,只需運行該文件。

如果在Web服務器上的另一個PHP中,您可以啟動必須像這樣運行的那個(而不是使用cURL,這消除了依賴):

$cx=stream_context_create(
    array(
        "http"=>array(
            "timeout" => 1, //at least PHP 5.2.1
            "ignore_errors" => true
        )
    )
);
@file_get_contents("http://localhost/infinite_loop.php", false, $cx);

或者你可以使用wget從linux cron開始,如下所示:

`* * * * * wget -O - http://localhost/infinite_loop.php`

或者您可以使用bitsadmin運行.bat文件從Windows Scheduler啟動,該文件包含以下內容:

bitsadmin /create infiniteloop
bitsadmin /addfile infiniteloop http://localhost/infinite_loop.php
bitsadmin /resume infiniteloop

對於永遠運行的PHP代碼,它應該具有ff:

  • set_time_limit(0); //所以php不會像往常一樣終止,如果你要做的事情需要很長的處理時間
  • 保持頁面活動的處理程序[通常通過設置客戶端腳本以間隔調用同一頁面]請參閱setInterval()setTimeout()

編輯:但由於您將設置一個cron作業,那么您可以遠離客戶端處理。

編輯:我的建議,不是使用無限循環,除非你有一個代碼告訴它在一段時間后退出循環。 請記住,您將使用cron作業調用同一頁面,因此沒有必要保持循環無限。 [編輯]否則,您將需要@ Tiberiu-IonuţStan建議的鎖定系統,因此每次調用cron作業時只能運行1個實例。

默認情況下,不,因為PHP有​​執行時間限制。 請參閱: http//www.php.net/manual/en/info.configuration.php#ini.max-execution-time

您可以通過設置值或在腳本中調用set_time_limit使其永久運行(http://php.net/manual/en/function.set-time-limit.php)。

但我不建議這樣做,因為PHP(由HTTP請求調用)並不是設計為無限循環。 如果可以,請使用本地腳本,或者間隔請求頁面以頻繁執行任務。

如果您的網站經常被其他人瀏覽,您可以在每個頁面中執行此操作。

(想象一下,如果有人多次請求腳本,您將運行多個實例)

只有在腳本中設置set_time_limit (0)才能實現,否則在配置中設置max_execution_time后它將停止執行。

並且您正在使用while(true)條件,這將使您的腳本始終運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM