2013-05-22 37 views
0

如果我寫的Bash shell程序與睡眠聲明,我可以做以下檢查它的狀態:PHP:如何編寫一條消息在'ps'命令中顯示?

ps aux | grep sleep 

如果我有睡眠出現的時間很長的時期,如10分鐘PHP嘗試查看網絡連接是否可用,但我無法確定程序是否有問題,或者它是否正確執行睡眠功能。

我想到的一種方法是將帶有時間戳的睡眠狀態寫入日誌文件。但是我想知道是否可以寫出這個狀態是可行的,因爲它會顯示出'ps aux |' grep sleep',這個php編程正在運行,現在睡着了。

還是有更好的方法和方法呢?謝謝!

+0

什麼是這個神祕的PHP腳本假設要做? – 2013-05-22 09:25:31

回答

0

也許創建一個sleep-php.sh然後用bash命令執行它,我認爲它是source sleep-php.sh。然後,您可以grep for sleep-php.sh,而不用冒着將它與偶然發生的不同睡眠命令混淆。

你甚至可以進一步動態創建「sleep-php- $ id.sh」,這樣你就可以在sleep中包含更多信息,這裏以id爲例。

0

恕我直言,最好的方法是不要把你的跟蹤器/記錄器放在較低的級別,操作系統,而是放在PHP本身。

我的建議是編寫一個PHP循環,嘗試次數有限,並且嘗試次數之間的等待時間較短,這樣您可以記錄每個循環以及每個循環的網絡連接輪詢結果。 一旦你的連接網絡被獲取,就從循環中斷開。 如果循環如果完成並且沒有獲得網絡訪問權限,請發出相關消息/業務操作。

define("MAX_ATTEMPT_COUNT", 10); 
define("WAITING_TIME", 60); 

$NetworkAccess = false; 

$fd = fopen("netpoll.log", 'a'); 
if (!$fd) die("I thought I could open netpoll.log but I can't."); 

for($i=1; $i<=MAX_ATTEMPT_COUNT; $i++) { 
    fwrite($fd, "Entering loop #" . $i); 

    $NetworkAccess |= pollNetwork(); // can be |= or simply = 

    if ($NetworkAccess) { 
     fwrite($fd, "network access acquired, exiting loop."); 
     break; 
    } 

    fwrite($fd, "No cigar, I'll try again in " . WAITING_TIME . " seconds."); 
    sleep(WAITING_TIME); 
} 

if(!$NetworkAccess) { 
    fwrite($fd, "No network access after " . MAX_ATTEMPT_COUNT*WAITING_TIME . " seconds, giving up."); 
} 

fclose($fd);