企业公司常用的几个 shell 脚本(实用)

1. LVS客户端自动配置
#/bin/bash
VIP=(202.106.195.111 202.106.195.222)
[ -e /etc/sysctl.conf ]&&rm -f /etc/sysctl.conf
[ -e /etc/sysconfig/network-scripts/ifcfg-lo:0 ]&&rm -f /etc/sysconfig/network-scripts/ifcfg-lo:0
[ -e /etc/sysconfig/network-scripts/ifcfg-lo:1 ]&&rm -f /etc/sysconfig/network-scripts/ifcfg-lo:1

echo "net.ipv4.conf.all.arp_ignore = 1">/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2">>/etc/sysctl.conf
echo "net.ipv4.conf.default.arp_ignore = 1">>/etc/sysctl.conf
echo "net.ipv4.conf.default.arp_announce = 2">>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore = 1">>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2">>/etc/sysctl.conf
sysctl -p &>/dev/null

cd /etc/sysconfig/network-scripts
for ((i=0;i<`echo ${#VIP[*]}`;i++))
do
  cp ifcfg-lo ifcfg-lo:$i
  echo "DEVICE=lo:$i">ifcfg-lo:$i
  echo "IPADDR=${VIP[$i]}">>ifcfg-lo:$i
  echo "NETMASK=255.255.255.255">>ifcfg-lo:$i
  echo "ONBOOT=yes">>ifcfg-lo:$i
  ifup ifcfg-lo:$i
  /usr/sbin/route add -host ${VIP[$i]} dev lo:$i &>/dev/null
done
2、企业日常巡检
#!/bin/bash

function system(){
echo "#########################系统信息#########################"
OS_TYPE=`uname`
OS_VER=`cat /etc/redhat-release`
OS_KER=`uname -a|awk '{print $3}'`
OS_TIME=`date +%F_%T`
OS_RUN_TIME=`uptime |awk '{print $3}'|awk -F, '{print $1}'`
OS_LAST_REBOOT_TIME=`who -b|awk '{print $2,$3}'`
OS_HOSTNAME=`hostname`

echo "    系统类型:$OS_TYPE"
echo "    系统版本:$OS_VER"
echo "    系统内核:$OS_KER"
echo "    当前时间:$OS_TIME"
echo "    运行时间:$OS_RUN_TIME"
echo "最后重启时间:$OS_LAST_REBOOT_TIME"
echo "    本机名称:$OS_HOSTNAME"
}
function network(){

echo "#########################网络信息#########################"
INTERNET=(`ifconfig|grep ens|awk -F: '{print $1}'`)
for((i=0;i<`echo ${#INTERNET[*]}`;i++))
do 
  OS_IP=`ifconfig ${INTERNET[$i]}|head -2|grep inet|awk '{print $2}'`
  echo "      本机IP:${INTERNET[$i]}:$OS_IP"
done
curl -I http://www.baidu.com &>/dev/null
if [ $? -eq 0 ]
then echo "    访问外网:成功"
else echo "    访问外网:失败"
fi
}

function hardware(){

echo "#########################硬件信息#########################"
CPUID=`grep "physical id" /proc/cpuinfo |sort|uniq|wc -l`
CPUCORES=`grep "cores" /proc/cpuinfo|sort|uniq|awk -F: '{print $2}'`
CPUMODE=`grep "model name" /proc/cpuinfo|sort|uniq|awk -F: '{print $2}'`

echo "     CPU数量: $CPUID"
echo "     CPU核心:$CPUCORES"
echo "     CPU型号:$CPUMODE"

MEMTOTAL=`free -m|grep Mem|awk '{print $2}'`
MEMFREE=`free -m|grep Mem|awk '{print $7}'`

echo "  内存总容量: ${MEMTOTAL}MB"
echo "剩余内存容量: ${MEMFREE}MB"

disksize=0
swapsize=`free|grep Swap|awk {'print $2'}`
partitionsize=(`df -T|sed 1d|egrep -v "tmpfs|sr0"|awk {'print $3'}`)
for ((i=0;i<`echo ${#partitionsize[*]}`;i++))
do
disksize=`expr $disksize + ${partitionsize[$i]}`
done
((disktotal=\($disksize+$swapsize\)/1024/1024))

echo "  磁盘总容量: ${disktotal}GB"

diskfree=0
swapfree=`free|grep Swap|awk '{print $4}'`
partitionfree=(`df -T|sed 1d|egrep -v "tmpfs|sr0"|awk '{print $5}'`)
for ((i=0;i<`echo ${#partitionfree[*]}`;i++))
do
diskfree=`expr $diskfree + ${partitionfree[$i]}`
done

((freetotal=\($diskfree+$swapfree\)/1024/1024))

echo "剩余磁盘容量:${freetotal}GB"
}


function secure(){
echo "#########################安全信息#########################"

countuser=(`last|grep "still logged in"|awk '{print $1}'|sort|uniq`)
for ((i=0;i<`echo ${#countuser[*]}`;i++))
do echo "当前登录用户:${countuser[$i]}"
done
 
md5sum -c --quiet /opt/passwd.db &>/dev/null
if [ $? -eq 0 ]
then echo "    用户异常:否"
else echo "    用户异常:是"
fi
}

function chksys(){
system
network
hardware
secure
}
3、检测网站地址是否存活
#!/bin/bash
. /etc/init.d/functions
url_list=(www.tec.com www.stu.com)

function chkurl(){
i=0
while [ $i -lt 2 ]
do
  curl http://${url_list[$i]} &>/dev/null
  if [ $? -eq 0 ]
  then
    action "${url_list[$i]}" /bin/true
  else
    action "${url_list[$i]}" /bin/false
  fi
  let i++
done
}

function main(){
while true
do chkurl
   sleep 3
done
}
main
4、LVS节点健康检查
#!/bin/bash
VIP=202.106.195.1
PORT=80
RIP=(192.168.100.10 192.168.100.20)

while true
do
  for ((i=0;i<`echo ${#RIP[*]}`;i++))
  do
    code=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://${RIP[$i]}`
    if [ $code -ne 200 -a $(ipvsadm -Ln|grep ${RIP[$i]}|wc -l) -eq 1 ]
    then ipvsadm -d -t $VIP:$PORT -r ${RIP[$i]}:$PORT
    elif [ $code -eq 200 -a $(ipvsadm -Ln|grep ${RIP[$i]}|wc -l) -lt 1 ]
    then ipvsadm -a -t $VIP:$PORT -r ${RIP[$i]}:$PORT
    fi
  done
sleep 5
done
5、Keepalived监控服务
#!/bin/bash
while true 
do
  if [ $(pidof httpd|wc -l) -eq 1 -a $(pidof keepalived|wc -l) -eq 0 ]
  then systemctl start keepalived
  fi

  pidof httpd &>/dev/null
  if [ $? -ne 0 ]
  then systemctl start httpd &>/dev/null
  fi
  sleep 3

  pidof httpd &>/dev/null
  if [ $? -ne 0 ]
  then systemctl stop keepalived
  fi
  sleep 3
done
6、mysql建库建表插入数据
#!/bin/bash
user="root"
password="123456"
mycmd="mysql -u$user -p$password"

for dbname in tec stu
do
  $mycmd -e "create database $dbname;"
  $mycmd -e "use $dbname;create table test(id int,name varchar(18));insert into test values(1,'rainman');"
done
7、mysql分库分表备份
#!/bin/bash
user="root"
password="123456"
mycmd="mysql -u$user -p$password -h 192.168.100.1"
mydump="mysqldump -u$user -p$password -h 192.168.100.1 --lock-tables=0"

for dbname in `$mycmd -e "show databases;"|egrep -v "Database|schema"`

do
  [ -d /opt/$dbname ]||mkdir -p /opt/$dbname
  for tabname in `$mycmd -e "show tables from $dbname"|sed 1d`
  do $mydump $dbname $tabname > /opt/$dbname/${tabname}_$(date +%F).sql
  done
done
8、检测MySQL主从复制是否异常
#!/bin/bash
user="root"
password="123456"
mycmd="mysql -u$user -p$password -h 192.168.100.20"


function chkdb() {
list=($($mycmd -e "show slave status \G"|egrep "Running|Behind"|awk -F: '{print $2}'))
if [ ${list[0]} = "Yes" -a ${list[1]} = "Yes" -a ${list[2]} -lt 120 ]
then echo "Mysql slave is ok"
else echo "Mysql slave replation is filed"
fi
}

function main() {
while true
do chkdb
   sleep 3
done
}
main
9、mysql日志切割
#!/bin/bash

logfile=/var/log/httpd/access_log
pid=/run/httpd/httpd.pid

mv $logfile /opt/access_$(date -d "yesterday" +"%Y-%m-%d").log
kill -USR1 $(cat $pid)

size=`du -sh /opt|awk '{print $1}'|awk -F "M" '{print $1}'`

if [ $size -gt 1000 ]
then find /opt -type f -name access* -mtime +30 -exec rm -f {} \;
fi
10、防DOS攻击-网络连接法
#!/bin/bash
netstat -antup|grep SYN_RECV|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c>/opt/tmp
exec</opt/tmp
while read line
do
  count=`echo $line|awk '{print $1}'`
  ip=`echo $line |awk '{print $2}'`
  if [ $count -gt 128 ]
  then iptables -I INPUT -s $ip -j DROP
  fi
done
11、入侵检测与邮件报警
#!/bin/bash
webdir=/var/www/html
cd $webdir
md5sum -c --quiet /opt/sumfile.db &>/opt/sum_err.log
if [ $? -ne 0 ]
then
    echo "the file_sum is changed"
    mail -s "sum_error" wcg@bw.com </opt/sum_err.log
else
    echo "check file_sum is ok"
fi

find /var/www/html/ -type f >/opt/countfile.db_sec
diff /opt/countfile.db_* &>/opt/count_err.log
if [ $(diff /opt/countfile.db_*|wc -l) -gt 0 ]
then
    echo "the file_count is changed"
    mail -s "count_err" wcg@bw.com </opt/count_err.log
else
    echo "check file_count is ok"
fi

12、企业微信报警
function sendmsg() {

CorpID="ww3c6298264d839e2f"
Secret="YvyMQpMRIoXtdQRWo0RNkMBTZnHWKvBwC3ILkyuCsKQ"
agentid=1000002

GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CorpID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL|awk -F\" '{print $10}')

#echo $Gtoken
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"

Ip=$(ip a |grep ens33 |grep inet|awk -F "/" '{ print $1 }' |awk -F " " '{ print $2 }')

/usr/bin/curl --data-ascii '{
    "touser": "@all",
    "toparty": "2",
    "msgtype": "text",
    "agentid": "1000002",
    "text": {"content": "'"警告:[$msg]\n主机:[`uname -n`]\n日期:[$(date +%F-%T)]\n地址:[$Ip]"'"},
    "safe":"0"

  }' $PURL >/dev/null 2>&1
}
  • 9
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有很多种实用shell脚本,以下就是一些例子: 1. 自动备份数据库脚本 这个脚本是用来自动备份数据库,可以设置备份数据的时间间隔和备份文件的命名。 ``` #!/bin/bash #数据库备份脚本 HOSTNAME="localhost" #数据库信息 PORT="3306" USERNAME="root" PASSWORD="123456" DBNAME="databasename" BACKUP_DIR="/opt/backup" #备份文件存储路径 DATE=$(date +%Y%m%d-%H%M%S) #获取当前系统时间 DUMPFILE=$BACKUP_DIR/${DBNAME}-$DATE.sql LOGFILE=$BACKUP_DIR/${DBNAME}-$DATE.log mysqldump --host=$HOSTNAME --port=$PORT --user=$USERNAME --password=$PASSWORD $DBNAME > $DUMPFILE if [[ $? -eq 0 ]]; then echo "$DATE 备份成功" >> $LOGFILE else echo "$DATE 备份失败" >> $LOGFILE fi ``` 2. 自动删除指定目录下的文件脚本 这个脚本是用来自动删除指定目录下一段时间之前的文件,可以设置目录和保存时间。 ``` #!/bin/bash #自动删除指定目录下一段时间之前的文件 DIR="/data/logs" #目录路径 DAYS="30" #保存天数 find $DIR -type f -mtime +$DAYS -exec rm -rf {} \; if [[ $? -eq 0 ]]; then echo "删除旧文件成功" fi ``` 3. 计算指定目录下的文件数量脚本 这个脚本是用来计算指定目录下的文件数量,可以设置目录路径。 ``` #!/bin/bash #计算指定目录下的文件数量 DIR="/opt" #目录路径 COUNT=`ls -l $DIR |grep "^-"|wc -l` echo "目录 $DIR 中的文件数量为:$COUNT" ``` 4. 批量修改指定目录下的文件名脚本 这个脚本是用来批量修改指定目录下的文件名,可以设置目录路径和文件名前缀。 ``` #!/bin/bash #批量修改指定目录下的文件名 DIR="/opt/logs" #目录路径 PREFIX="error_" #文件名前缀 for file in `ls $DIR` do name=`basename $file` mv $DIR/$name $DIR/${PREFIX}$name done if [[ $? -eq 0 ]]; then echo "修改文件名成功" fi ``` 这些是比较实用shell脚本,当然还有很多其他的脚本可以执行各种不同的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值