shell脚本在实际工作中的应用

  

这篇文章给大家分享的是外壳脚本在实际工作中的应用。小编觉得挺实用的,因此分享给大家学习。如下资料是。

1) Mysql数据库备份脚本(完整备份+异地备份)

一般Mysql数据库备份会采用在Mysql从库上执行全量备份+增量备份方式。在从库备份避免Mysql主库备份的时候锁表造成业务影响。

 <代码> # !/bin/bash,
  设置- e,,,,,,,,,,,,#当脚本有错误时,便停止执行脚本
  #备份的数据库名
  数据库=(
  ,,,,,,“magedu01"
  ,,,,,,“magedu02"
  )
  用户=皉oot"
  密码=癲bpwd123"
  
  邮件=?23456 @163.com"
  BACKUP_DIR=/数据/备份
  日志文件=/数据/备份/data_backup.log
  日期=Y '日期+ % % m % d_ % H % m '
  
  cd BACKUP_DIR美元
  #开始备份之前,将备份信息头写入日记文件,
  回声“- - - - - - - - - - - - - - - - - - - - - -“在比;美元的日志文件
  回声“备份日期:“美元(日期+“y % - % - % d % H: % m: % S")在祝辞美元的日志文件
  回声“- - - - - - - - - - - - - - - - - -产生绯闻;在比;美元的日志文件
  
  在${}数据库;数据库
  ,/usr/地方/mysql/bin/, mysqldump - u $ USER - p $密码——事件,- r——选择,数据库美元| gzip在$ {BACKUP_DIR} \/${数据库}_{日期}.sql.gz美元
  ,如果[$ ?==0);
  ,,呼应“日期——数据库备份succeed"美元;在比;美元的日志文件
  其他的,
  ,,呼应“数据库备份失败!“在比;美元的日志文件
  ,fi
  完成
  #判断数据库备份是否全部成功,全部成功就同步到异地备份f服务器
  如果[$ ?==0);
  ,/usr/bin/rsync -zrtopg,——删除,/数据/备份/* root@192.168.10.10:/数据/备份/,在/dev/null 2祝辞,1
  其他的
  ,呼应“数据库备份失败!“在比;美元的日志文件
  ,#备份失败后向管理者发送邮件提醒
  ,邮件- s“数据库日常备份失败!“美元的邮件
  fi
  
  #删除30天以上的备份文件,
  找到BACKUP_DIR美元,30 - name - type f -mtime +“* .gz"- rm - f{} \;  

2) nginx进行日志切割的脚本

 <代码> # !/bin/bash
  设置- e,,,,,,,,,,,,#当脚本有错误时,便停止执行脚本
  LOG_PATH=?var/log/nginx",,,#定义日志存放路径
  ACCESS_LOG=癮ccess.log"
  ERROR_LOG=癳rror.log"
  昨天=$(日期- d & # 39; 1天前# 39;+ % F),,,,#定义昨天的日期
  因为我在$(找到$ {LOG_PATH} - name $ {ACCESS_LOG});
  ,我,cd $(目录名$ {})
  ,,如果[[- f $ {ACCESS_LOG}]];
  ,,,昨天,cp {$ {} -} $ {ACCESS_LOG},,,,#将原本的日志文件复制一份
  ,,,,:比;$ {ACCESS_LOG},,,,,,,,,,,,#将原本的日志内容清空
  ,,fi
  ,,如果[[- f $ {ERROR_LOG}]];
  ,,,,ERROR_SIZE=$ (ls - l,$ {ERROR_LOG} | awk & # 39;{打印5美元}& # 39;)
  ,,,,如果[[{ERROR_SIZE} gt 20971520美元]],然后,,,,,,,#如果error.log日志大于20 m,进行切割
  ,,,,,昨天,cp {$ {} -} $ {ERROR_LOG}
  ,,,,,,:比;$ {ERROR_LOG}
  ,,,,fi
  ,,fi
  完成
  找到$ {LOG_PATH} - type f - name“* .log"-mtime + 7删除,,,,,,#将一周前的日志进行删除 

3) Nginx负载均衡服务器上监控Nginx进程的脚本

企业负载均衡层如果用到Nginx + keepalive架构,而keepalive无法进行Nginx服务的实时切换,所以这里用了一个监控脚本check_nginx_pid.sh,每隔5秒就监控一次Nginx的运行状态,如果发现有问题就关闭本机的keepalive程序,让贵宾切换到从Nginx负载均衡器上。

 <代码> # !/bin/bash
  而:
  做
  nginxpid=' ps - c nginx——没有标题| wc - l '
  如果[$ nginxpid eq 0];然后
  ulimit -SHn 65535/usr/local/nginx/sbin/nginx
  ,,睡5
  其他的/etc/init.d/keepalive停止
  fi
  睡5
   

4) Mysql主从监控邮件报警脚本

1)此脚本应该能适应各种各样不同的内外网环境。
2)让脚本也顺便监控下Mysql是否正常运行。
3)奴隶机器的IO和SQL状态都必须为是的,缺一不,可这里用到了多重条件判断——。

 <代码> # !/bin/bash
  MYSQLPORT=& # 39; netstat na | grep“LISTEN" | grep“3306“| awk - f [:“;“]+ & # 39;{打印4美元}& # 39;& # 39;
  MYSQLIP=& # 39; ifconfig eth0 | grep“inet addr"| awk - f [:“;“]+ & # 39;{打印4美元}& # 39;& # 39;
  状态=$ (/usr/地方/mysql/bin/mysql - u dbus -dbpwd123 - s/tmp/mysql。袜子- e“显示奴隶状态\ G"| grep - i“running")
  IO_env=& # 39; echo $状态| grep IO | awk & # 39;{print $ 2} & # 39; & # 39;
  SQL_env=& # 39; echo $状态| grep SQL | awk & # 39; {print $ 2} & # 39; & # 39;
  
  如果(“MYSQLPORT"美元;==?306”;]
  然后
  回声“mysql running"
  其他的
  邮件- s“警告!服务器:美元MYSQLIP mysql down"magedu@gmail.com
  fi
  
  如果(“IO_env"美元;=?Yes"——“SQL_env"美元;=?Yes"]
  然后
  回声“奴隶跑!“
  其他的
  回声“# # # # # # # $日期# # # # # # # # #“祝辞祝辞//日志/check_mysql_slave.log数据
  回声“奴隶不是跑!“在比;//日志/check_mysql_slave.log数据
  邮件- s“警告!MySQLIP_replicate_error"美元;magedu@gmail.com & lt; & lt;//日志/check_mysql_slave.log数据
  fi 

shell脚本在实际工作中的应用