当前位置: 首页 > 科技观察

企业生产环境中的shell脚本案例分享

时间:2023-03-20 00:34:22 科技观察

生产环境中的shell脚本相当多。下面介绍几个企业中常用的shell脚本。1、MySQL数据库备份脚本,以下脚本为Mysql全量备份+异地备份。一般Mysql数据库备份会在MYSQL从库上采用全量备份+增量备份的方式。从数据库备份时避免Mysql主库备份时锁表对业务造成影响。shell>vimdb_backup.sh#!/bin/bash#description:MySQLbuckupshellscript#author:magedu.com#192.168.10.10是专用的备份服务器,服务器之间需要做免密码登录#备份数据库名DATABASES=("magedu01""magedu02")USER="root"PASSWORD="dbpwd123"MAIL="magedu@gmail.com"BACKUP_DIR=/data/backupLOGFILE=/data/backup/data_backup.logDATE=`date+%Y%m%d_%H%M`cd$BACKUP_DIR#开始备份前,将备份信息头写入日志文件echo"--------------------">>$LOGFILEecho"BACKUPDATE:"$(date+"%y-%m-%d%H:%M:%S")>>$LOGFILEecho"--------------------">>${DATABASES}中数据库的$日志文件;执行/usr/local/mysql/bin/mysqldump-u$USER-p$PASSWORD--events-R--opt$DATABASE|gzip>${BACKUP_DIR}\/${DATABASE}_${DATE}.sql。gzif[$?==0];thenecho"$DATE--$DATABASEisbackupsucceed">>$LOGFILEelseecho"DatabaseBackupFail!">>$LOGFILEdone#判断是否所有数据库备份成功,如果全部成功,同步到远程备份f服务器if[$?==0];then/usr/bin/rsync-zrtopg--delete/data/backup/*root@192.168.10.10:/data/backup/>/dev/null2>&1elseecho"DatabaseBackupFail!">>$LOGFILE#备份失败后给管理员发送邮件提醒mail-s"databaseDailyBackupFail!"$MAILfi#删除超过30天的备份文件找到$BACKUP_DIR-typef-mtime+30-name"*.gz"-execrm-f{}\;2、Nginx负载均衡服务器上监控Nginx进程的脚本如果企业负载均衡层采用Nginx+Keepalived架构,而Keepalived无法对Nginx服务进行实时切换,那么这里使用一个监控脚本check_nginx_pid.sh来每5秒监控一次Nginx的运行状态。如果有问题,关闭本地Keepalived程序,让VIP切换到slaveNginx负载均衡器。shell>vimcheck_nginx_pid.sh#!/bin/bashwhile:donginxpid='ps-Cnginx--no-header|wc-l'if[$nginxpid-eq0];then  ulimit-SHn65535  /usr/local/nginx/sbin/nginxsleep5nginxpid='ps-Cnginx--no-header|wc-l' if[$nginxpid-eq0];then /etc/init.d/keepalivedstop fifisleep5done3、MySQL主从监控邮件告警脚本这个脚本应该能适应各种内外网环境。让脚本也监控MySQL是否正常运行。Slave机器的IO和SQL状态都必须是YES,缺一不可。这里使用了多个条件判断-a。shell>check_mysql_slave.sh#!/bin/bash#checkMySQL_SlaveStatusMYSQLPORT='netstat-na|grep"LISTEN"|grep"3306"|awk-F[:""]+'{print$4}''MYSQLIP='ifconfigeth0|grep"inetaddr"|awk-F[:""]+'{print$4}''STATUS=$(/usr/local/mysql/bin/mysql-udbuser-dbpwd123-S/tmp/mysql.sock-e"显示slavestatus\G"|grep-i"running")IO_env='echo$STATUS|grepIO|awk'{print$2}''SQL_env='echo$STATUS|grepSQL|awk'{print$2}''if[”$MYSQLPORT"=="3306"]then echo"mysqlisrunning"else mail-s"warn!server:$MYSQLIPmysqlisdown"magedu@gmail.comfiif["$IO_env"="Yes"-a"$SQL_env"="Yes"]then echo"Slaveisrunning!"else echo"#######$date##########">>/data/log/check_mysql_slave.log?echo"Slaveisnotrunning!">>/data/log/check_mysql_slave.log mail-s"warn!$MySQLIP_replicate_error"magedu@gmail.com<crontab-e*/10****root/bin/sh/root/check_mysql_slave.sh4。系统初始化脚本该脚本用于与新安装的Linux相关的配置工作,如更换默认的yum源、优化系统内核、停止一些不必要的系统服务等。该脚本特别适合大量新安装的CentOS系列服务器。适用于Centos7shell>vimcenots_7_system_init.sh#!/bin/bash#Filename:centos7-init.sh#Author:magedu@gmail.com#判断是否为root用户if[`whoami`!="root"];thenecho"onlyrootcanrunit"exit1fi#执行前提示echo-e"\033[31m这是centos7系统初始化脚本,会更新系统内核到最新版本,请谨慎运行!\033[0m"read-s-n1-p"Pressanykeytocontinueorctrl+Ctocancel"echo"Yourinputs:$REPLY"#1.定义函数yum_config(){mv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo。backupwget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repoyumcleanall&&yummakecache}#2.定义函数ntp_config(){yum–yinstallchronysystemctlstartchronyd&&systemctlenablechronydtimedatect来配置NTPlset-timezoneAsia/Shanghai&&timedatectlset-ntpyes}#3.定义函数close_firewalld(){systemctlstopfirewalld.service&>/dev/nullsystemctldisablefirewalld.service&>/dev/null}#3。定义函数close_selinux(){setenforce0sed-i's/enforcing/disabled/g'/etc/selinux/config}#5。定义安装常用工具函数yum_tools(){yuminstall–yvimwgetcurlcurl-develbash-completionlsofiotopiostatunzipbzip2bzip2-develyuminstall–ygccgcc-c++makecmakeautoconfopenssl-developenssl-perlnet-toolssource/usr/share/bash-completion/bash_completion}#6.定义函数update_kernel(){rpm--importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm-Uvhhttp://www.elrepo.org/elrepo-release-7.0-3.el7。elrepo.noarch.rpmyum--enablerepo=elrepo-kernelinstall-ykernel-mlgrub2-set-default0grub2-mkconfig-o/boot/grub2/grub.cfg}#executescriptmain(){yum_config;ntp_config;close_firewalld;close_selinux;yum_tools;更新内核;}主要