2016-12-31 27 views
1

我要做的事情有點複雜。使用PHP和計時器啓動和終止後臺python腳本

我有一個python腳本,我想從PHP運行它,但在後臺。我曾經在某處看到,爲了在後臺運行一個python腳本,我必須使用PHP命令exec(script.py)來運行,而不用等待一個回報:至今沒有問題。

第一個問題:

我必須停止與其他PHP命令這個循環腳本,如何做到這一點?

第二個問題:

我要實現服務器端的計時器,誰在結束的時候停止腳本。

我發現這個代碼:

<?php 
$timer = 60*5; // seconds 
$timestamp_file = 'end_timestamp.txt'; 
if(!file_exists($timestamp_file)) 
{ 
    file_put_contents($timestamp_file, time()+$timer); 
} 
$end_timestamp = file_get_contents($timestamp_file); 
$current_timestamp = time(); 
$difference = $end_timestamp - $current_timestamp; 

if($difference <= 0) 
{ 
    echo 'time is up, BOOOOOOM'; 
    // execute your function here 
    // reset timer by writing new timestamp into file 
    file_put_contents($timestamp_file, time()+$timer); 
} 
else 
{ 
    echo $difference.'s left...'; 
} 
?> 

this答案。

然後,有一種方法可以在MySQL數據庫中實現它? (與腳本停止的集成不是問題)

+0

https://secure.php.net/manual/en/function.exec.php#89716 使用它來獲取進程ID,將其存儲在文件或數據庫中,然後殺死具有該進程的進程ID稍後。 請記住,無論小,過程可能已經停止,並且另一個過程最終使用該ID代替(這將意味着你正在殺死一個不同的過程) – xorinzor

回答

1

這實際上很簡單。您可以使用內存對象緩存系統。我會推薦memcached。內存對象從memcached可以從系統中的任何地方逐字地訪問。唯一的要求是支持到memcached後端服務器的連接。 (PHP確實,Python做等)

回答你第一個問題

創建一個名爲stopme與在memcached數據庫中的值0變量。

從您的python腳本連接到memcached數據庫並永久讀取變量stopme。比方說,當變量stopme的值爲0時,python腳本正在運行。

爲了阻止PHP腳本,從您的PHP腳本到memcached服務器的連接並設置stopme爲1

的Python腳本接收即時和退出更新後的值。

回答你的第二個問題:

這是可以做到像我的回答解釋之前通過閱讀共享變量,但另外我想提一提,你也可以使用一個cronjob殺死正在運行的腳本。

+0

謝謝,我會嘗試它。 – Northumber