[英]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.