2012-07-22 82 views
2

我有一個自制的「進程管理器」爲我的網站,簡單地解析shell命令
ps aux | grep phpps aux | grep的PHP ---檢查GET參數

這是有用的,看是否有PHP進程佔用太很多CPU或MEM。但是,有時我會看到一些php進程延遲了一些時間來完成。問題是,這並沒有告訴我很多:

/usr/bin/php /home/mysite/public_html/process.php

因爲,這個過程可能取決於很多的東西把它接收參數。

所以,我的問題是,是否有可能知道PHP進程接收到什麼GET參數?

謝謝。

回答

2

假設您在Linux或BSD系統上,您可以使用proctitle更改php進程的名稱以包含GET查詢字符串。

+0

謝謝。我會對此進行一些調查,如果對我有用,請接受您的答案。它會影響PHP腳本的其他功能嗎?或者,它會只添加GET查詢字符串,這就是全部? – Nuno 2012-07-22 15:56:55

+1

@NunoPeralta你需要添加代碼到你的process.php中並調用['setproctitle()'function](http://php.net/manual/en/function.setproctitle.php)並將它傳遞給你的查詢串。 – 2012-07-22 16:24:42

+0

哦,是的!這正是我想要的!即使對於其他事情也可能有用。非常感謝你!! :) – Nuno 2012-07-22 16:49:00

0

唯一的問題是GET參數僅在通過Web服務器調用而不是從命令行調用時傳遞到您的腳本,在您的情況下您只能獲得ARGS。

你總是可以做一個的grep:

$ ps -auwwwx | grep my_php_script 

看到的ARG在命令行腳本

+0

我有一些cronjobs,並且以這種方式傳遞GET參數:「process.php arg1 = 5 foo = bar」。但是,使用「ps auwwwx」不會顯示任何傳遞給php進程的GET參數。輸出與「ps aux」大致相同。謝謝。 – Nuno 2012-07-22 16:11:06

0

如果有人需要ANSWEER這個問題,我可以從Apache服務器發送命令到Ubuntu控制檯,只需: 在sudoers文件中添加www-data用戶權限。

www數據ALL =(ALL)NOPASSWD:從PHP文件中的所有

和執行命令

$comand2= shell_exec('sudo -S service cron restart 2>&1'); 
echo "<pre> $comand2 $</pre>"; 
0

如果你想看到通過PS Linux控制檯上的你的詳細進展情況你必須使用proctitle這個pecl擴展會給你

setproctitle()函數。

擴展是非常古老的,但仍然工作甚至zts模式。

如果您使用CLI的版本,你可以使用:cli-set-process-title()這是本地的PHP函數(版本PHP5> =)

如此簡單的代碼,我用它來追蹤在Linux上:

<? 
if ((PHP_SAPI === 'cli' OR defined('STDIN'))) { 
    $tmp = $_SERVER["argv"]; 
    unset($tmp[0]); 
    $text = "/". implode('/',$tmp); 
    @cli_set_process_title (urldecode($text)); 
} else { 
    @setproctitle (urldecode($_SERVER["REQUEST_URI"])); 
} 
?> 

我只是在codeigniter上寫入index.php。

瞧過程使用最CPU和內存在Linux上:

ps o pid,stat,time,pcpu,pmem,cmd -C php --sort -pcpu 

現在你將能夠看到流程