同时测试多个服务是否存活的脚本[shell和perl]

完全是拿来练手的,它的行为与系统的RHEL系统的service脚本和 服务脚本类似。但是结果的细节上有些差异,不过它多一项功能就是同时检测多个服务是否存活。
时间仓促加之代码质量也一般,就不加注释了,有兴趣的朋友可以和我讨论。
测试环境:
RHEL 5u3
Bash shell  v3.2.25
perl v5.8.8
s hell代码
#!/bin/bash
# [email protected]
# 2009-09-02 02:12:10
# 2009-09-02 21:38:50
# 2009-09-05 23:46:40 add commnets
# Retun result eg.
# openssh-daemon (pid  3826) is running...
# ypbind is stopped
## 脚本的帮助信息
Usage(){
echo -en "`basename $0` <service_name1> [<servicename2>]\n"
echo -en "eg:\n"
echo -en "`basename $0` sshd httpd\n"
return 1
}
# 判断命令行中是否有参数(服务名字)传入
if [ $# -le 0 ]; then
 Usage
else
 # 进入循环,每一次循环处理一个参数
 while [ $# -gt 0 ]
 do
  # 默认程序通过/etc/init.d/<service_name>文件是否存在来判断服务是否存在
  if [ -f /etc/init.d/$1 ];then
   # 判断服务对应的pid文件是否存在,默认从/var/run/<service>/和/var/run/两个位置查验
   # 查验位置/var/run/
   if [ -f /var/run/$1.pid ]; then
    # 对其发送0空信号,如果返回正常,则证明服务对应的进程是存活的。
    if kill -0 `cat /var/run/$1.pid` &>/dev/null; then
     # 进程存活情况
     echo -en "$1 (pid `cat /var/run/$1.pid`) is running ...\n"
    fi
   elif [ -f /var/run/$1/$1.pid ]; then
    if kill -0 `cat /var/run/$1/$1.pid` &>/dev/null; then
     echo -en "$1 (pid `cat /var/run/$1.pid`) is running ...\n"
    fi
   else
     # 服务停止,或者对应pid文件不存在,则认为服务已经停止。
     echo -en "$1 is stopped\n"
   fi
  else
   # 服务不存在
   echo -en "$1: unrecognized service\n"
  fi
  # 准备取下一个参数
  shift  
 done
fi
perl代码
#!/usr/bin/perl
# [email protected]    
# 2009-09-02 01:19:45
# 2009-09-02 21:38:01
# 2009-09-03 11:53:57
# Notice:
#  bash shell  do like above if we want to test the service psad:
# kill -0 /var/run/psad/psad.pid;echo $?

# use warnings;
use strict;

if (@ARGV <=0){
&Usage;
exit 1;
};

while (@ARGV > 0){

my $proc_name = $ARGV[0];

if (-e "/etc/init.d/$proc_name"){

#  open PIDFILE,"/var/run/$proc_name/$proc_name.pid" or open PIDFILE,"/var/run/$proc_name.pid" or print "$proc_name: $!\n";
   open PIDFILE,"/var/run/$proc_name/$proc_name.pid" or open PIDFILE,"/var/run/$proc_name.pid" or print "$proc_name stopped\n";
  while (<PIDFILE>){
    if (/(\d+)/){
      if (kill(0,$1)){
        print "$proc_name pid: $1 is running ...\n";
      }else{
        print "$proc_name stopped\n";
      };

    };
  };
  close PIDFILE;
}else{
  print "$proc_name: unrecognized service\n";    
};

shift;
}
sub Usage(){
  my $script_name = `basename $0`;chomp $script_name;
  print "$script_name <service_name1> [<servicename2>]\n";
  print "eg:\n";
  print "$script_name sshd httpd\n";
};

本文出自 “希奥开源” 博客,谢绝转载!

你可能感兴趣的:(shell,service,script,running,stopped)