用PHP控制Nagios进程
单位一直用Nagios做数据中心的服务监控,由于近期应用升级频繁,经常需要配合启、停nagios进程,以免产生错误告警。为了使升级流程更顺畅,希望给应用组一个PHP网页来控制Nagios程序。开始动手做PHP,遇到两个难点:1. 如何用PHP来执行系统命令;2. 如何用有效php用户控制系统进程。
难点一解决过程:参考http://www.21andy.com/blog/20101018/1981.html,从中选择使用exec()函数。原型:string exec (string command [, string array [, int return_var]]) 。具体语句:
exec('/etc/init.d/nagios status',$r, $err_code); //$r: 命令返回字符串;$err_code,命令返回错误代码;
难点二:php以apache身份在系统中运行,无权限控制nagios进程,这时需要用sudo以及相关的/etc/sudoers来帮助。在/etc/sudoers中加入以下行:
apacheALL=NOPASSWD:/etc/init.d/nagios start
apacheALL=NOPASSWD:/etc/init.d/nagios stop
apacheALL=NOPASSWD:/etc/init.d/nagios reload
apacheALL=NOPASSWD:/usr/sbin/nagios *
同时注释掉Defaults requiretty 行,以消除"sudo: no tty present and no askpass program specified"报错。 具体控制语句如下:
[*]exec('sudo /etc/init.d/nagios start',$r, $err_code);
[*] if($err_code!=0){
[*] echo " we had a problem with error code: ".$err_code;
[*] }
[*] else{
[*] echo " Monitoring is on now!";
[*] }
难点解决之后,其他工作就相对容易了。
现在已经将控制权转移到应用组,而本人可以不用再等通知去上下监控系统频繁开关nagios服务了。PHP真是无所不能呀!
页:
[1]