2012-07-22 144 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 

现在你将能够看到流程