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

简介:
完全是拿来练手的,它的行为与系统的RHEL系统的service脚本和 服务脚本类似。但是结果的细节上有些差异,不过它多一项功能就是同时检测多个服务是否存活。
时间仓促加之代码质量也一般,就不加注释了,有兴趣的朋友可以和我讨论。
测试环境:
RHEL 5u3
Bash shell  v3.2.25
perl v5.8.8
s hell代码
#!/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,如需转载请自行联系原作者



相关文章
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
22小时前
|
弹性计算 运维 Shell
每天解析一个shell脚本(61)
【4月更文挑战第26天】shell脚本解析及训练(61)
11 3
|
23小时前
|
弹性计算 运维 Shell
每天解析一个shell脚本(58)
【4月更文挑战第26天】shell脚本解析及训练(58)
67 0
|
23小时前
|
弹性计算 Shell 数据安全/隐私保护
每天解析一个shell脚本(56)
【4月更文挑战第26天】shell脚本解析及训练(56)
13 0
|
2天前
|
监控 Shell 应用服务中间件
第十二章 Shell脚本编写及常见面试题(二)
第十二章 Shell脚本编写及常见面试题(二)
|
2天前
|
监控 关系型数据库 Shell
第十二章 Shell脚本编写及常见面试题(一)
第十二章 Shell脚本编写及常见面试题(一)
|
3天前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
3天前
|
运维 Shell
Shell脚本判断IP是否合法性(多种方法)
Shell脚本判断IP是否合法性(多种方法)
|
9天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
34 0
|
10天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句