用PHP来监控CentOS服务器系统负载

admin 发表于 [PHP] 分类,标签: CentOS Linux 服务器维护
0

  在实际项目的应用中,我们由于各种条件的现实,利用PHP来实现服务器负载监控将是一种更为灵活的方式。

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

c程序

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

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.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;
}

 

注意:如果使用的是非CentOS的其它Linux系统,上面代码中的头文件 #include <sys/types.h>, 可能会编译错误,请更改为#include <systypes.h>

  编译该文件gcc -o w -Wall w.c,这时会在当前目录下生成程序w。改变此程序的属主chmod u+s ./w。

<?php
 
  $last_line = exec('/usr/bin/w', $retval);
  $returnArray = explode("load average: ", $retval[0]);
 
  $returnString = $returnArray[1];
  $arr = split(', ', $returnString);
 
  echo "<h1> Liunx/Unix 服务器PHP负载监控 </h1>";
  echo "1分钟的负载情况: {$arr[0]} <br />";
  echo "5分钟的负载情况: {$arr[1]} <br />";
  echo "15分钟的负载情况: {$arr[2]} <br />";
 
?>

PHP执行

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

发表我的评论