|
单位一直用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中加入以下行:
apache ALL=NOPASSWD:/etc/init.d/nagios start
apache ALL=NOPASSWD:/etc/init.d/nagios stop
apache ALL=NOPASSWD:/etc/init.d/nagios reload
apache ALL=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真是无所不能呀!
|
|
|