最近在用nagios,写了个检查系统服务的插件,其中用到了如下的perl代码:
system "ps aux | grep $proc_command > /tmp/$file_name_ps";
# ps aux | grep $proc_command 输出重定向到 /tmp/$file_name_ps 中
但是发现输出文件中没有要显示的服务,尝试使用
system "ps aux > /tmp/$file_name_ps";
发现输出文件中的结果不全,比如:
对于apache2 服务,完全显示出来应该是下面这样:
root 1372 0.0 0.2 207156 12016 ? Ss 08:57 0:00 /usr/sbin/apache2 -k start
www-data 1497 0.0 0.2 208340 8972 ? S 08:57 0:00 /usr/sbin/apache2 -k start
在命令行执行这个命令显示结果是完全的;
但是,nagios调用这个插件时,结果只显示一部分,如下:
root 1372 0.0 0.2 207156 12016 ? Ss 08:57 0:00 /usr/sbin/apach
后面的内容不能显示,导致插件的输出没有。
解决办法:
在插件代码中不使用 ps aux,而使用 ps auxwww ,这样就会显示全部结果。