例85 统计迸发绘图
背景:需要统计网站的并发量,并绘图
说明:只需要写出shell脚本即可,不用关心zabbix的配置
假设日志路径/data/logs/www.aaa.com_access.log
日志格式如下
核心要点
查看 日志中1秒内日志的数量,即并发数(每秒请求多少次)
#!/bin/bash
t=`date -d "-1 second" +%d/%b/%Y:%`
log=/data/logs/www.aaa.com_access.log
tail -1000 $log |grep -c "$t"
例86 关闭服务
要求:在centos6系统里,我们可以使用ntsysv关闭不需要开机启动的服务,当然也可以使用chkconfig工具来实现
写一个shell脚本,用chkconfig工具把不常用的服务关闭。脚本需要写成交互式的,需要我们给它提供关闭服务的名字
要点:chkconfig -list
#!/bin/bash
while:
do
chkconfig --list | grep '3:on' |awk '{print $1}' > /tmp/on_sev.txt
echo -e "\033[32m系统里开起来这些服务:"
cat /tmp/on_sev.txt
echo
read -p "Please select a service from this list." s
if ! agrep -qw "$s" /tmp/on_sev.txt
then
echo -e "\033[31m 你提供的服务名并未开启"
continue
fi
chkconfig $s off
break
done
例87 彻底关闭tomcat
在生产环境中,经常遇到tomcat无法彻底关闭,也就是说用tomcat自带的shutdown.sh脚本无法将java进程关掉。所以,需要借助shell脚本,将进程杀死,然后再启动会
写一个shell脚本,实现上述功能。彻底杀死一个进程的命令是kill -9 pid
要点
kill -9 pid
#!/bin/bash
shut=/usr/local/tomcat/bin/
java_pc()
{
n=`pgrep java|wc -l`
}
cd $dir
./shutdown.sh
conut=0
while [ $conut - lt 5 ]
do
n=`jvava_pc`
if [ $n -gt 0 ]
then
killall java
count=$[$conut+1]
sleep 1
else
break
fi
done
n=`java_pc`
if [ $n -gt 0 ]
then
killall -9 java
fi
n=`java_pc`
if [ $n -gt 0 ]
then
echo "Tomcat无法强制杀死"
exit
fi
cd $dir
例88 去掉文件名后缀
要求:至少用两种方法,批量把当前目录下所有文件后缀名为.bak的后缀去掉,比如1.txt.bak去掉后为1.txt
要点:方法一:用sed把文件名结尾的.bak去掉
方法二:awk截取去掉后缀部分,赋值变量
#!/bin/bash
for f in `ls ./*.bak `
do
mv $f `echo $f|sed 's/*.bak$//'`
f1=`echo $f|awk -F '.bak$' '{print $1}'`
mv $f $f1
done
例89 查询域名是否过期
写一个脚本,查询指定域名的过期时间,并在到期前一周每天发一封提醒邮件
要点:可以在linux命令下使用“whois 域名”,如“whois apelearn.com”,来获取该域名的一些信息
#!/bin/bash
mail_u=admin@admin.com
t1=`date +%s`
is_install_whois()
{
whisch whois >/dev/null 2>/dev/null
if [ $? -ne 0 ]
then
yum install -y epel-release
yum install -y jwhois
fi
}
notify()
{
e_d=`whois $1|grep 'Expiry Dte'|awk '{print $4}'|cut -d 'T' -f 1`
if [ -z "$e_d" ]
then
e_d=`whois $1|grep 'Expiration Time'|awk '{print $3}'`
fi
e_t=`date -d "$e_d" +%s`
n=`echo "86400*7"|bc`
e_t1=$[$s_t-$n]
e_t2=$[$e_t+$n]
if [ $t1 -ge $e_t1 ] && [ $t1 -lt $e_t ]
then
python mail.py $mail_u "Domanin $1 will to be expired." "Domanin $1 expire date is $e_d."
fi
if [ $t1 -ge $e_t ] && [ $t1 -lt $e_t2 ]
then
python mail.py $mail_u "Domanin $1 has been expired" "Domanin $1 expire date is $e_d."
fi
#!/bin/bash
mail_u=admin@admin.com
t1=`date +%s`
is_install_whois()
{
whisch whois >/dev/null 2>/dev/null
if [ $? -ne 0 ]
then
yum install -y epel-release
yum install -y jwhois
fi
}
notify()
{
e_d=`whois $1|grep 'Expiry Dte'|awk '{print $4}'|cut -d 'T' -f 1`
if [ -z "$e_d" ]
then
e_d=`whois $1|grep 'Expiration Time'|awk '{print $3}'`
fi
e_t=`date -d "$e_d" +%s`
n=`echo "86400*7"|bc`
e_t1=$[$s_t-$n]
e_t2=$[$e_t+$n]
if [ $t1 -ge $e_t1 ] && [ $t1 -lt $e_t ]
then
python mail.py $mail_u "Domanin $1 will to be expired." "Domanin $1 expire date is $e_d."
fi
if [ $t1 -ge $e_t ] && [ $t1 -lt $e_t2 ]
then
python mail.py $mail_u "Domanin $1 has been expired" "Domanin $1 expire date is $e_d."
fi
#!/bin/bash
mail_u=admin@admin.com
t1=`date +%s`
is_install_whois()
{
whisch whois >/dev/null 2>/dev/null
if [ $? -ne 0 ]
then
yum install -y epel-release
yum install -y jwhois
fi
}
notify()
{
e_d=`whois $1|grep 'Expiry Dte'|awk '{print $4}'|cut -d 'T' -f 1`
if [ -z "$e_d" ]
then
e_d=`whois $1|grep 'Expiration Time'|awk '{print $3}'`
fi
e_t=`date -d "$e_d" +%s`
n=`echo "86400*7"|bc`
e_t1=$[$s_t-$n]
e_t2=$[$e_t+$n]
if [ $t1 -ge $e_t1 ] && [ $t1 -lt $e_t ]
then
python mail.py $mail_u "Domanin $1 will to be expired." "Domanin $1 expire date is $e_d."
fi
if [ $t1 -ge $e_t ] && [ $t1 -lt $e_t2 ]
then
python mail.py $mail_u "Domanin $1 has been expired" "Domanin $1 expire date is $e_d."
fi
}
if pgrep whois &>/dev/null
then
kill -9 whois
fi
is_install_whois
for d in aaa.com bbb.com aaa.cn
do
notify $d &
done
例90 秘钥自动认证
写一个shell脚本,当我们执行时,提示要输入对方的ip和root密码,然后可以自动把本机的公钥增加到对方的机器上,从而实现秘钥认证
要点:expect
ssh-copy-id
#!/bin/bash
read -p "输入一个IP地址" ip
read -p "输入此机器的root密码" pasd
is_install()
{
if ! rpm -q $1 &>/dev/null
then
yum install -y $1
fi
}
is_install openssh-cliens
is_install expect
if [ ! -f ~/.ssh/id_rsa.pub ]
then
echo -e "\n" |ssh -keygen -P ''
fi
cat > key.expect <<EOF
#!/usr/bin/expect
set host [lindex $argv 0]
set passwd [lindex $argv 1]
spawn ssh-copy-id root$host
expect {
"yes/no"{ sed "yes\r"; exp_continue}
"password:" {send "$passwd\r"}
}
expect eof
EOF
chomd a+x key.expect
./key.expect $ip $pasd