一、线上WEB服务器日志文件打包、
实验环境:日志文件所在目录/data/logs/linu_web
要求:创建自动日志打包脚本,并删除已打包的日志文件安
#在data目录下创建存放脚本用的sh目录
[root@localhost ~]# mkdir -p /data/sh
[root@localhost ~]# cd /data/sh/
#创建日志自动打包脚本
[root@localhost sh]# vim auto_log_tgz.sh
#auto log packages
#by allan 2017/12/20
LOGS_DIR="/data/logs/linux_web/" #定义变量设定所在目录,用绝对路径
for i in `find $LOGS_DIR -name "access_*.log"` #循环i依次获取目录下的文件
do
FILES=`echo $i|xargs basename` #利用basename获取文件名
# FILES=`echo $i|awk -F "/" '{print $NF}'` #利用awk切割获取文件名
DIR=`echo $i|xargs dirname` #利用dirname获取每个文件所在的目录
cd $DIR #进入文件所在目录进行打包
echo "The tar -czvf ${FILES}.tar.gz ${FILES}" #打印打包信息
tar -czvf ${FILES}.tar.gz ${FILES} #打包文件
rm -rf ${FILES} #删除源文件
done
二、批量管理主机脚本
思路:首先新建一个ip列表文件记录需要管理的Ip地址,这样即使地址较多没有规律也能利用for循环依次进行批量操作管理如下
[root@localhost sh]# cat ip_list #ip列表文件
192.168.15.10
192.168.15.11
192.168.15.12
192.168.15.14
192.168.15.15
192.168.15.16
192.168.15.17
192.168.15.18
192.168.15.19
[root@localhost sh]# vim ssh_ip.sh #创建脚本
#!/bin/bash
for i in `cat /data/sh/ip_list`
do
echo -e "\033[31m-----------------\033[0m" #分界符,每循环依次代表一台主机操作完毕
echo "ip=$i" #模拟远程操作命令,按实际情况添加具体操作语句
done
[root@localhost sh]# sh ssh_ip.sh
-----------------
ip=192.168.15.10
-----------------
ip=192.168.15.11
-----------------
ip=192.168.15.12
-----------------
ip=192.168.15.14
-----------------
ip=192.168.15.15
-----------------
ip=192.168.15.16
-----------------
ip=192.168.15.17
-----------------
ip=192.168.15.18
-----------------
ip=192.168.15.19
下面是远程管理脚本实例,参数是命令的话就在全部脚本执行,是IP和命令就只在该IP的主机上执行
#!/bin/bash
#auto exec remote server CMD
#2016 www.jfedu.net
################# #以下部分是变量赋值区
CMD=$* #脚本跟的所有参数赋值给变量CMD
FILES="/data/sh/ip_list.txt" #ip列表的绝对路径赋值给变量FILES
################# #判断如果参数为空打印提示信息并退出
if [ -z "$CMD" ];then
echo -e "\033[32mUsage:{Please enter $0 CMD df -h|ifconfig eth0}\033[0m"
exit
fi
############ #第一参数的.替换成换行符\n,然后统计是否有4位来判定$1参数是不是IP
NUM=`echo $1|sed 's/\./\n/g'|wc -l` #判断第一个参数是否为IP
if [ $NUM == "4" ];then
CMD=`echo $CMD|sed "s/$1//g"` #重新给CMD赋值,去除$1IP地址剩余的命令
echo -e "\033[32mssh -l root $1 $CMD\033[0m"
ssh -l root $1 "$CMD"
exit
fi
############ #以下部分是循环列表中的主机执行操作
for i in `cat $FILES`
do
echo -e "\033[32m---------------------\033[0m"
echo -e "\033[32mssh -l root $i $CMD\033[0m"
ssh -l root $i "$CMD"
done
网友评论