开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

简介:
+关注继续查看
完全是拿来练手的,它的行为与系统的RHEL系统的service脚本和 服务脚本类似。但是结果的细节上有些差异,不过它多一项功能就是同时检测多个服务是否存活。
时间仓促加之代码质量也一般,就不加注释了,有兴趣的朋友可以和我讨论。
测试环境:
RHEL 5u3
Bash shell  v3.2.25
perl v5.8.8
shell代码
#!/bin/bash
wangxiaoyu@w.cn
# 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 
# wangxiaoyu@w.cn    
# 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"; 
};



     本文转自xiaoyuwang 51CTO博客,原文链接:http://blog.51cto.com/wangxiaoyu/198199,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Shell 脚本速查手册
立即下载
MaxCompute基于BigBench标准的最新测试进展
立即下载
中小企业如何巧用容器技术
立即下载