PHP监控linux服务器负载

PHP监控linux服务器负载

由于Web Server以及PHP的实现方式所限,我们在现实环境中很难利用PHP去调用一些Linux中需要root权限才能执行的程序,对此,我从网上找到另外一种方式来绕开这个限制。首先先写个c程序中转调用系统命令,然后用PHP去执行此c程序。

c程序

首先写个c文件,比如/usr/local/ismole/w.c

//note 由于wordpress编辑器的原因,请将此代码中头文件多余的空格去除

#include < stdio.h>

#include < stdlib.h>

#include < systypes.h>

#include < unistd.h>

int main()

{

uid_t uid ,euid;

//note 获得当前的uid

uid = getuid();

//note 获得当前euid

euid = geteuid();

//note 交换这两个id

if(setreuid(euid, uid))

perror("setreuid");

//note 执行将要执行linux系统命令

system("/usr/bin/w");

return 0;

}

编译该文件gcc -o ipt -Wall w.c,这时会在当前目录下生成程序w。

改变此程序的属主chmod u+s ./w。

PHP执行

文件内容如下,放在web目录下,访问就会输出当前的服务器负载情况。

<?php

/*

More & Original PHP Framwork

Copyright (c) 2007 - 2008 IsMole Inc.

$Id: serverMonitor.php 408 2008-12-02 08:07:40Z kimi $

*/

//note key的验证过程

if($key != $authkey) {

// exit('key error);

}

$last_line = exec('/usr/local/ismole/w', $retval);

$returnArray = explode("load average: ", $retval[0]);

$returnString = $returnArray[1];

echo $returnString;

?>

按照上面的实例,我们可以用PHP来做任何我们想执行的Linux系统命令,SVN更新,服务器监控,备份,恢复,日常维护等等。