完全是拿来练手的,它的行为与系统的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
}
# 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
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
# 服务停止,或者对应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";
};
# 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,如需转载请自行联系原作者