当前位置:   article > 正文

【shell脚本】监控磁盘/内存使用率·检测域名是否正常·一键部署LMNP·拉黑攻击服务器的异常ip_shell 磁盘使用率

shell 磁盘使用率

1、监控2台服务器硬盘利用率脚本实战

案例:192.168.169.169监控192.168.169.170、1192.168.169.71俩台虚拟机磁盘使用率,并发送邮件

###############169机器上编写#####################
vim /root/monitor_disk.sh
#! /bin/bash
for ip in 192.168.169.170 192.168.169.171
do
   ssh root@$ip "bash /root/monitor.sh"
done

# crontab -e 编写定时任务
0 0 * * * bash /root/monitor_disk.sh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
###############170、170机器上编写###################
vim  /root/monitor.sh
#!/bin/bash

yum -y install sendmail  # 安装sendmail
service sendmail start
yum install -y mailx  # 安装mail

diskUsed=$(df -Th|awk -F'[ %]+' '/\/$/{print  $6}')
mkdir /tmp
logFile=/tmp/jiankong.log
 
function Sendmail(){
    mail -s"监控报警" 1011776350@qq.com < $logFile
}
function check(){
    if [ $diskUsed -ge 85 ];then
       echo "磁盘使用率:${diskUsed}%" > /tmp/jiankong.log
      Sendmail
    fi
}
function main(){
    check
}
 
main
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2、批量检查 5个网站域名是否正常

#!/bin/bash
array=(www.baidu.com  www.oldboy.com  www.it.com  http://www.taobao.com  www.hhhhhhh.com)
for i in ${array[*]}
do
  #-T 设置超时时间 -t设置链接的次数 
  wget -T 5 -t 2 --spider $i &>/dev/null 
  if [ $? -eq 0 ];then
     echo "$i 域名正常"
  else
     echo "$i 域名异常"
  fi
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

结果:

[root@localhost lianxi]# bash test_dns.sh
www.baidu.com 域名正常
www.oldboy.com 域名正常
www.it.com 域名异常
http://www.taobao.com 域名正常
www.hhhhhhh.com 域名异常
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、统计磁盘使用率,磁盘大于%5 就打印mail 小于 硬盘正常 内存也是一样

#!/bin/bash
function disk(){
    diskUsed=$(df -Th|awk -F'[ %]+' '/\/$/{print  $6}')
    if [ $diskUsed -ge 5 ];then
        echo -e "\e[31m磁盘使用率超过5%\e[0m"
    else
        echo  " nothing to do"
    fi
}
function mem(){
    total=`free -m|grep -i mem|tr -s " "|cut -d " " -f2`
    used=`free -m|grep -i mem|tr -s " "|cut -d " " -f3`
    used_rate=`echo "scale=4;$used/$total" |bc`  # 保留4位小数
    echo $used_rate
    result=` echo "$used_rate>0.05"|bc `
    if (( $result  == 1 ))
    then
        echo -e "\e[31m使用率超过5%\e[0m"
    else
        echo  " nothing to do"
    fi
}

disk
mem
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4、有人攻击我服务器 就拉黑异常ip

# 获取列表,统计最近日志 登录次数超过20次的ip
iplist=$(/bin/lastb -n 100|awk '{print $3}'|sort|uniq -c|awk '{if ($1>20) print $2}')
# 追加到黑名单并清空登录日志
for ip in ${iplist}
do
   echo ALL: ${ip} >> /etc/hosts.deny
   echo > /var/log/btmp
done 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5、使用for循环安装 批量安装3台服务器 php环境 使用(LAMP)脚本实现 环境yum 安装都可以 主要测试语法 工作结果就是 每台服务器 都可以打开php 测试页面

5.1 onekey_install_nginx

 #!/bin/bash

#解决软件的依赖关系,需要安装的软件包
yum install epel-release -y
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim geoip geoip-devel wget -y

#新建nginx用户和组
id  nginx || useradd nginx -s /sbin/nologin

#下载nginx软件
mkdir  /hejin -p && cd /hejin
wget  https://nginx.org/download/nginx-1.21.4.tar.gz
#解压软件
tar xf nginx-1.21.4.tar.gz 
#进入解压后的文件夹
cd nginx-1.21.4

#编译前的配置
./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx  --with-http_ssl_module   --with-threads  --with-http_v2_module  --with-http_stub_status_module  --with-stream  --with-http_geoip_module --with-http_gunzip_module
#如果上面的编译前的配置失败,直接退出脚本
if (( $? != 0));then
	exit
fi
#编译,启动2个进程去编译,这样速度快
make -j 2
#编译安装
make  install

#修改PATH变量
echo  "PATH=$PATH:/usr/local/nginx/sbin" >>/root/.bashrc

#firewalld and selinux
#stop firewall和设置下次开机不启动firewalld
service firewalld stop
systemctl disable firewalld

#临时停止selinux和永久停止selinux
setenforce 0
sed  -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

#开机启动
chmod +x /etc/rc.d/rc.local
echo  "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
source /etc/rc.local

#修改nginx.conf的配置,例如:端口号,worker进程数,线程数,服务域名
sed  -i '/worker_processes/ s/1/2/' /usr/local/nginx/conf/nginx.conf
sed  -i  '/worker_connections/ s/1024/2048/' /usr/local/nginx/conf/nginx.conf
#sed  -i -r '36c \\tlisten  80;' /usr/local/nginx/conf/nginx.conf
#sed  -i -r '37c \\tserver_name www.it.com;' /usr/local/nginx/conf/nginx.conf

#killall nginx进程
killall -9 nginx
#启动nginx
/usr/local/nginx/sbin/nginx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

5.2 onkey_install_mysql

#!/bin/bash

#解决软件的依赖关系
yum  install cmake ncurses-devel gcc  gcc-c++  vim  lsof bzip2 openssl-devel ncurses-compat-libs -y

#解压mysql二进制安装包
cd /hejin && tar  xf  mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
#移动mysql解压后的文件到/usr/local下改名叫mysql
mv mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql

#新建组和用户 mysql
groupadd mysql
#mysql这个用户的shell 是/bin/false 属于mysql组 
useradd -r -g mysql -s /bin/false mysql

#关闭firewalld防火墙服务,并且设置开机不要启动
service firewalld stop
systemctl  disable  firewalld

#临时关闭selinux
setenforce 0
#永久关闭selinux
sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config

#新建存放数据的目录
mkdir  /data/mysql -p
#修改/data/mysql目录的权限归mysql用户和mysql组所有,这样mysql用户可以对这个文件夹进行读写了
chown mysql:mysql /data/mysql/
#只是允许mysql这个用户和mysql组可以访问,其他人都不能访问
chmod 750 /data/mysql/

#进入/usr/local/mysql/bin目录
cd /usr/local/mysql/bin/

#初始化mysql
./mysqld  --initialize --user=mysql --basedir=/usr/local/mysql/  --datadir=/data/mysql  &>passwd.txt

#让mysql支持ssl方式登录的设置
./mysql_ssl_rsa_setup --datadir=/data/mysql/

#获得临时密码
tem_passwd=$(cat passwd.txt |grep "temporary"|awk '{print $NF}')
  #$NF表示最后一个字段
  # abc=$(命令)  优先执行命令,然后将结果赋值给abc 

# 修改PATH变量,加入mysql bin目录的路径
#临时修改PATH变量的值
export PATH=/usr/local/mysql/bin/:$PATH
#重新启动linux系统后也生效,永久修改
echo  'PATH=/usr/local/mysql/bin:$PATH' >>/root/.bashrc

#复制support-files里的mysql.server文件到/etc/init.d/目录下叫mysqld
cp  ../support-files/mysql.server   /etc/init.d/mysqld

#修改/etc/init.d/mysqld脚本文件里的datadir目录的值
sed  -i '70c  datadir=/data/mysql'  /etc/init.d/mysqld

#生成/etc/my.cnf配置文件
cat  >/etc/my.cnf  <<EOF
[mysqld_safe]

[client]
socket=/data/mysql/mysql.sock

[mysqld]
socket=/data/mysql/mysql.sock
port = 3306
open_files_limit = 8192
innodb_buffer_pool_size = 512M
character-set-server=utf8

[mysql]
auto-rehash
prompt=\\u@\\d \\R:\\m  mysql>
EOF

#修改内核的open file的数量
ulimit -n 1000000
#设置开机启动的时候也配置生效
echo "ulimit -n 1000000" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local


#启动mysqld进程
service mysqld start

#将mysqld添加到linux系统里服务管理名单里
/sbin/chkconfig --add mysqld
#设置mysqld服务开机启动
/sbin/chkconfig mysqld on

#初次修改密码需要使用--connect-expired-password 选项
#-e 后面接的表示是在mysql里需要执行命令  execute 执行
mysql -uroot -p$tem_passwd --connect-expired-password   -e  "set password='123456';"

#检验上一步修改密码是否成功,如果有输出能看到mysql里的数据库,说明成功。
mysql -uroot -p'123456'  -e "show databases;"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

5.3 onekey_install_php

# 安装软件包
yum -y install php php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap
# 安装php扩展支持mysql 
yum install  php-tidy php-common php-devel php-fpm php-mysql -y
systemctl start php-fpm.service
  • 1
  • 2
  • 3
  • 4
  • 5

5.4 批量部署

将前3个安装脚本整合成一个onekey_install_lnmp.sh

#!/bin/bash
for i in 192.168.169.169 192.168.169.170  192.168.169.179
do
   # 前提是建立了免密通道
   scp  onekey_install_lnmp.sh  root@$i:/root
   ssh  root@$i   "bash /root/onekey_install_lnmp.sh"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5.4 测试

# 修改每台服务器的nginx配置文件
 location / {
            root   /html/www;
            index  index.html index.php;
        }
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME /html/www$fastcgi_script_name;                                      #修改成发布目录
            include        fastcgi_params;
        }

#发布测试页测试是否ok
cd  /html/www
vi index.php

<?php 
        phpinfo(); 
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

浏览器访问
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/154104
推荐阅读
相关标签
  

闽ICP备14008679号