• 生产脚本1


    1、用户登录失败五次写入黑名单禁止登陆

    通过lastb获取登录失败的IP及登录失败的次数

    1. #!/usr/bin/bash
    2. # 通过lastb获取登录失败的IP及登录失败的次数
    3. lastb | awk '{print $3}' | grep ^[0-9] | sort | uniq -c | awk '{print $1"\t"$2}' > /tmp/host_list
    4. list=`cat /tmp/host_list`
    5. line=`wc -l /tmp/host_list | awk '{print $1}'`
    6. count=1
    7. # 如果/tmp/host_list中有数据,循环至少需要执行一次
    8. while [[ "$line" -ge "$count" ]]; do
    9. ip_add=`echo $list | awk '{FS="\t"} {print $2}'`
    10. num=`echo $list | awk '{FS="\t"} {print $1}'`
    11. # 登录失败达到5次就将该IP写入文件
    12. if [[ "$num" -ge 5 ]]; then
    13. grep "$ip_add" /etc/hosts.deny &> /dev/null
    14. if [[ "$?" -gt 0 ]]; then
    15. # --------> 此处添加当前系统时间,请根据实际情况定义日期格式
    16. echo "# $(date +%F' '%H:%M:%S)" >> /etc/hosts.deny
    17. echo "sshd:$ip_add" >> /etc/hosts.deny
    18. fi
    19. fi
    20. let count+=1
    21. # 删除已经写入文件的IP
    22. sed -i '1d' /tmp/host_list
    23. # 修改$list变量
    24. list=`cat /tmp/host_list`
    25. done
    26. # 清空临时文件
    27. echo '' > /tmp/host_list
    28. exit 0
    29. ~
    30. ~
    31. ~

    2、日志切割脚本

    1. vi runlog.sh
    2. #!/bin/bash
    3. # 设置日志文件存放目录
    4. logs_path="/var/log/nginx/"
    5. backup_path="/var/log/nginx/logs/"
    6. # 设置pid文件
    7. pid_path="/run/nginx.pid"
    8. # 重命名日志文件
    9. mv ${logs_path}/access.log ${backup_path}/access_$(date -d "yesterday" +"%Y%m%d").log
    10. mv ${logs_path}/error.log ${backup_path}/error_$(date -d "yesterday" +"%Y%m%d").log
    11. # 向nginx主进程发信号重新打开日志
    12. kill -USR1 `cat ${pid_path}`
    13. # 压缩
    14. gzip ${backup_path}/access_$(date -d "yesterday" +"%Y%m%d").log
    15. gzip ${backup_path}/error_$(date -d "yesterday" +"%Y%m%d").log
    16. # 删除超过指定时间的日志文件,单位:天
    17. find $backup_path -name "*.gz" -type f -mtime +30 -exec rm -rf {} \;

    3、nginx状态监控脚本

    1. #!/bin/bash
    2. nginx=/usr/local/nginx/sbin/nginx
    3. read -ep "请输入要执行的命令(start/stop/status/reload):" sta
    4. case $sta in
    5. #启动nginx选项
    6. start)
    7. #先检测nginx是否已经启动
    8. netstat -nlpt | grep nginx &> /dev/null
    9. if [ $? -eq 0 ];then
    10. echo "nginx已经启动!"
    11. else
    12. echo "开始启动nginx!"
    13. $nginx
    14. fi
    15. ;;
    16. #停止nginx运行
    17. stop)
    18. $nginx -s stop
    19. #判断nginx是否已经停止
    20. if [ $? -eq 0 ];then
    21. echo "nginx已经停止运行!"
    22. else
    23. echo "nginx停止失败,请重试!"
    24. fi
    25. ;;
    26. #nginx的状态
    27. status)
    28. netstat -nlpt | grep nginx &> /dev/null
    29. if [ $? -eq 0 ];then
    30. echo "nginx已经启动!"
    31. else
    32. echo "nginx没有运行!"
    33. fi
    34. ;;
    35. #重载nginx
    36. reload)
    37. $nginx -s reload
    38. if [ $? -eq 0 ];then
    39. echo "nginx重载成功!"
    40. else
    41. echo "nginx重载失败,请重试!"
    42. fi
    43. ;;
    44. *)
    45. echo "请按提示正确输入!"
    46. ;;
    47. esac

    4、监控系统中的cpu、内存、硬盘、、使用率超过85%进行邮件告警

    1. #!/bin/bash
    2. now=`date +%Y-%m-%d` #显示现在的时间日期
    3. #cpu使用值
    4. cpu_warn='85'
    5. #mem空闲值本机器为4000所以设置成15%也就是600
    6. mem_warn='600'
    7. #disk使用值
    8. disk_warn='85'
    9. #---cpu
    10. item_cpu () {
    11. cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'|cut -f 1 -d "."` #top -b -n 1 查看所有运行的经常的状态 grep cpu 过滤出cpu的那一项 awk '{print $8}’ 打印出第八项 cut -f 1 -d "." 显示第一个字段的内容以. 号作为分隔符。这段话就是用来计算cpu的空闲率
    12. cpu_use=`expr 100 - $cpu_idle` #cpu的使用率=100-cpu空闲率
    13. echo "$now 当前cpu使用率为 $cpu_use" >> /tmp/monitoring.log #输出结果到指定的文档
    14. if [ $cpu_use -gt $cpu_warn ] #当cpu的使用率大于我们设定的使用率时
    15. then
    16. echo "cpu过载请及时处理" | mail -s "cpu运行状态" 2493411817@qq.com #警报信息发送到邮箱
    17. else
    18. echo "cpu运行状态良好" | mail -s "cpu运行状态" 2493411817@qq.com
    19. fi
    20. }
    21. #---mem
    22. item_mem () {
    23. #MB为单位
    24. mem_free=`free -m | grep "Mem" | awk '{print $4+$6}'` #查看内存使用状态过滤出men的哪一项并打印出第四项加第六项的值
    25. echo "$now 当前内存剩余空间为 ${mem_free}MB" >> /tmp/monitoring.log #内存空闲值输出到指定文档
    26. if [ $mem_free -lt $mem_warn ] #如果空闲值小于我们设定的值
    27. then
    28. echo "内存过载请及时处理 " | mail -s "内存运行状态" 2493411817@qq.com
    29. #输出警告提示发送到邮箱
    30. else
    31. echo "内存运行状态良好 " | mail -s "内存运行状态" 2493411817@qq.com
    32. fi
    33. }
    34. item_disk () {
    35. disk_use=`df -P | grep /dev/mapper/centos-root | grep -v -E '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%"`
    36. #查看硬盘的情况过滤出主硬盘那一项打印出第五项输出以%为分割点的第一个字符
    37. echo "$now 当前磁盘使用率为 $disk_use" >> /tmp/monitoring.log #使用率输出到指定文档
    38. if [ $disk_use -gt $disk_warn ] #如果使用率大于我们设定的值输出结果
    39. then
    40. echo "硬盘过载及时处理" | mail -s "硬盘运行状态" 2493411817@qq.com #输出硬盘过载并发送到指定的邮箱
    41. else
    42. echo "硬盘运行状态良好" | mail -s "硬盘运行状态" 2493411817@qq.com
    43. fi
    44. }
    45. item_cpu
    46. item_mem
    47. item_disk

    5、监控系统中的IO await大于70进行邮件告警(可使用邮箱163、QQ、139、网易等)

    6、监控系统中的网络流量下载上传超过8M(可变)进行邮件告警(可使用邮箱163、QQ、139、网易等)

     7、统计 Linux 进程相关数量信息  

    8、备份数据库表结构及表数据

    在实际生产中常常针对数据库有这样的需求:

    • 要求同时导出某数据库中所有数据表的表结构和数据;
    • 要求仅导出部分表结构和每个表中数据数据;
    • 要求仅导出某数据表的表结构和部分数据。
    1. mysqldump -u ${user_name}@${datanode} \
    2. -h ${proxy_ip} \
    3. -P ${proxy_port} \
    4. -p${pwd} \
    5. --default-character-set=utf8 \
    6. --hex-blob \
    7. --events \
    8. --routines \
    9. --triggers \
    10. --single-transaction \
    11. --set-gtid-purged=ON \
    12. --skip-lock-tables \
    13. --no-create-db \
    14. --no-create-info \
    15. --complete-insert \
    16. --databases ${db_name} \
    17. --tables ${table_name} \
    18. --where="TRANS_DT='20211214'" > result.sql

    选项

        --default-character-set=${charset_name} :指定通过变量 ${charset_name} 指定的字符集作为默认字符集;
        --hex-blob :使用 16 16 16 进制格式导出二进制字段;
        --events 或 -E :在导出的结果中包含事件调度器事件(Event Scheduler events),该选项需要用户对于数据库具有 EVENT 权限;
        --routines 或 -R:在导出的结果中包含存储过程或函数,该选项需要用户对于数据库具有全局的 SELECT 权限;
        --triggers :在导出的结果中包含每个数据表中的触发器,该选项默认生效,可以使用 --skip-triggers 来关闭;
        --single-transaction:该选项使得再导出数据之前先将事务隔离级别设置为可重复读即 REPEATABLE READ ,然后向服务器发送一个 START TRANSACTION SQL 语句。
            该选项仅对支持事务的数据表有效(如使用 InnoDB 引擎的数据表),最终可以实现导出的数据库中所有支持事务的数据表状态都在 START TRANSACTION 语句发出后的时间点一致;
            对于使用 MyISAM 或者 MEMORY 这些不支持事务的引擎创建的数据表,导出的过程中这些数据表的状态是会发生改变的,如果希望实现上述类似的效果,则需要使用Flush tables with read lock; (简称 FTWRL)对整个数据库加全局读锁;
            当使用该选项正在导出数据时,为了确保最终导出的数据有效(即数据表内容正确且 binlog 一致),其他和该数据库建立的连接不能使用下列任何语句:ALTER TABLE , CREATE TABLE , DROP TABLE , RENAME TABLE 以及 TRUNCATE TABLE 操作,因为可重复读即 REPEATABLE READ 隔离状态无法隔离上述语句,所以如果使用上述语句将导致导出的数据不正确或导出数据失败;
            该选项和 --lock-tables 选项是互斥的,因为锁表即 LOCK TABLES 会导致任何未提交的事务隐式提交。
        --lock-tables 或 -l :该选项会针对每一个被导出的数据库,在进行数据导出之前锁上其中的所有数据表,每个数据库中所有表的加锁级别都是 READ LOCAL ,此时对于使用 MyISAM 的数据表是可以进行数据并发插入的。
            对于使用 InnoDB 这样支持事务的引擎,此时使用 --single-transaction 选项更为合适,因为后者压根无需锁表;
            一些选项如 --opt 会自动开启 --lock-tables 选项,如果你不希望这样的效果,可以在所有选项之后加上 --skip-lock-tables 选项。
        --set-gtid-purged=${value} :该选项用于使用基于 GTID (即全局事务标识符:Global Transaction Identifier)实现复制(replication)的服务器(即 gtid_mode=ON)。
            该选项可控制 @@SESSION.sql_log_bin=0 语句是否包含在最终导出的数据文件中,在后续载入导出的数据文件时,该语句可以避免生成 binlog ;
            当 ${value} 为 ON 时,SET @@SESSION.sql_log_bin=0 会被包含了最终导出的数据文件中。需要注意的是,如果指定该选项但是服务器上没有开启 GTID 机制,则会发生错误。
        --skip-lock-tables :
        --no-create-db 或 -n:如果指定了 --databases 或 --all-databases 选项,则该选项在导出数据文件中不包括 CREATE DATABASE 语句。
        --no-create-info 或 -t:在导出的数据文件中不写入 CREATE TABLE 语句。
        --complete-insert 或 -c:使用包括字段名的全插入语句。
        --databases ${db_name} 或 -B:导出多个数据库。通常, mysqldump 会将命令行第一个名称参数视为数据库名,后续所有名称参数视为表名,使用这个选项,命令会将所有名称参数视为数据库名。CREATE DATABASE 和 USE 语句也会被包含在输出中;
            该选项还可以用于导出 performance_schema 数据库,对于该数据库,即使指定 --all-databases 选项也不会导出。
        --tables ${table_name} :mysqldump 命令将该选项之后的参数都视为数据表名。

    9、预防脑裂脚本

    1. 检测思路:正常情况下keepalived的VIP地址是在主节点上的,如果在从节点发现了VIP,就设置报警信息。脚本(在从节点上)如下:
    2. vim split-brainc_check.sh
    3. #!/bin/bash
    4. # 检查脑裂的脚本,在备节点上进行部署
    5. LB01_VIP=192.168.1.229
    6. LB01_IP=192.168.1.129
    7. LB02_IP=192.168.1.130
    8. while true
    9. do
    10. ping -c 2 -W 3 $LB01_VIP &>/dev/null
    11. if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 ];then
    12. echo "ha is brain."
    13. else
    14. echo "ha is ok"
    15. fi
    16. sleep 5
    17. done

  • 相关阅读:
    vue中常用修饰符
    vue项目使用highlight.js 代码高亮插件,并给它添加行数
    互联网家装驶入深水区:谁在求变,又有谁在裸泳?
    java从入门到进阶
    IDEA下使用Spring MVC
    redis 持久化机制
    Pooling Revisited: Your Receptive Field is Suboptimal 论文解读和感想
    虚拟机Ubuntu操作系统常用终端命令(3)(详细解释+详细演示)
    代码随想录二刷day35
    VTM/VVC 编译与测试-&&- YUV与RGB空间转换
  • 原文地址:https://blog.csdn.net/m0_58292366/article/details/124692261