第一题 每日一文件

  1. #!/bin/bash
  2. date_log=$(date +%F)
  3. dir=/data/log/disklog
  4. [ -d $dir ] || mkdir -p $dir
  5. df -h > /$dir/$date_log.log

第二题 统计访问量

  1. #!/bin/bash
  2. #统计nginx访问日志
  3. if [ $# -ne 1 ];then
  4. echo "请输入nginx的访问日志文件"
  5. exit 1
  6. fi
  7. awk '{print $1}' $1 |sort|uniq -c|sort -rn

第三题 统计内存

  1. #!/bin/bash
  2. mem_num=$(ps aux|sed 1d|awk '{print $6}')
  3. num=0
  4. for i in $mem_num;do
  5. num=$((num+i))
  6. done
  7. echo "$((num/1024/1024))"

第四题 监控机器存活

  1. #!/bin/bash
  2. read -p "请输入IP地址:" IP
  3. if [ -z $IP ];then
  4. echo "输入的IP不能为空..."
  5. exit 1
  6. fi
  7. VALID_CHECK=$(echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
  8. if [ ${VALID_CHECK:-no} == "yes" ]; then
  9. num=`ping -c5 $IP|grep packet|awk -F "[%]" '{print $NR}'|awk -F ',' '{print $NF}'`
  10. if [ $num -ge 50 ];then
  11. echo "$IP已断开"
  12. else
  13. echo "$IP正常"
  14. fi
  15. else
  16. echo "$IP输入错误"
  17. fi

第五题 批量修改文件

  1. #!/bin/bash
  2. path=/123
  3. find "$path" -type f -name "*.txt"|xargs -i mv {} {}.bak
  4. cd /
  5. tar zcvf $path/123.tar.gz 123
  6. cd /123
  7. rename ".bak" "" *

第六题 检测nginx端口

  1. #!/bin/bash
  2. duankou=`ss -lntp|grep 80|wc -l`
  3. if [ $duankou -ne 1 ];then
  4. echo "Nginx error"
  5. else
  6. echo "Nginx 正常"
  7. fi
  8. [ro

第七题 Mysql备份

  1. #!/bin/bash
  2. ##################################################################################
  3. # [功能说明]
  4. #==========================================================================
  5. # 1.每个月的14号、28号的晚上23:45进行全量备份;
  6. # 2.备份完成后,只保留最新的备份数据;
  7. # 3.将最新的备份文件上传到远程备份服务器中,远程备份服务器地址为172.20.62.224
  8. # [使用说明]
  9. #==========================================================================
  10. # 1.打开/etc/crontab/ 添加如下定时任务,每天晚上23:45分执行;
  11. # 45 23 * * * /bin/bash /scripts/dbbackup.sh &> /dev/null
  12. # (请先通过service crond status 确保crond服务已经有启动。);
  13. # 2.请根据环境设置好[参数列表]中的参数。
  14. #==========================================================================
  15. # [参数列表]
  16. #==========================================================================
  17. # 1. username : 数据库用户名;
  18. # 2. password : 数据库密码;
  19. # 3. baseDir : 备份数据存储的基目录,全量数据存储于
  20. # 4. backup_host : 备份服务器地址
  21. # ******************需要设置的变量参数**************************************
  22. #日期
  23. now_date=$(date +%d)
  24. #mysql数据库用户名
  25. username="root"
  26. #备份文件存储目录
  27. backup_dir=/home/data/backup/mysql
  28. #binlog备份文件存储目录
  29. backup_bin=/home/data/backup/mysql_binlog
  30. #数据库连接命令
  31. MYCMD="mysql -u$username"
  32. #数据库备份命令
  33. MYDUMP="mysqldump -u$username -x -B -F -R -E --master-data=2 --triggers --flush-privileges --default-character-set=utf8 --hex-blob"
  34. #备份服务器地址
  35. backup_host="172.20.62.224"
  36. # binlog的目录及文件
  37. binlog_path=/opt/software/mysql
  38. binFile=/opt/software/mysql/mysql-bin.index
  39. #全量备份mysql数据,并远程推送至备份服务器
  40. mysql_dump() {
  41. [ ! -d $backup_dir ] && mkdir -p $backup_dir
  42. #DBLIST=`$MYCMD -e "show databases;"|sed 1d|egrep "^ag_*|^huiche*|^jd_gaosu$|^jiading_keyikao$|^jingan$|^ping$|^zvic-dev-*"`
  43. DBLIST=`$MYCMD -e "show databases;"|sed 1d|egrep "^jiading_keyikao$|^jingan$"`
  44. for dbname in $DBLIST;do
  45. [ ! -d $backup_dir/$dbname ] && mkdir -p $backup_dir/$dbname
  46. $MYDUMP $dbname|gzip >$backup_dir/$dbname/${dbname}_$(date +%F).sql.gz
  47. done
  48. rsync -az --no-o --no-g $backup_dir rsync_backup@$backup_host::backup/ --password-file=/etc/rsync.password
  49. }
  50. #增量备份数据,并远程推送至备份服务器
  51. incre_backup() {
  52. [ ! -d $backup_bin ] && mkdir -p $backup_bin
  53. #(1)拷贝binlog前先锁定表,以防备份期间数据的写入
  54. mysql -u${username} -e "flush tables with read lock;" 2>/dev/null
  55. #(2)将缓存中的数据更改写到binlog中,并生产一个新的mysql-bin.00000*文件
  56. mysqladmin -u${username} flush-logs 2>/dev/null
  57. counter=$(wc -l $binFile | awk '{print $1}')
  58. nextNum=0
  59. #(3)将除刚产生的binlog文件外的所有文件拷贝到备份目录中
  60. for file in `cat $binFile`;do
  61. baseFile=$(basename $file)
  62. nextNum=$(($nextNum + 1))
  63. if [ $nextNum -eq $counter ];then
  64. break
  65. else
  66. cp $binlog_path/$baseFile $backup_bin
  67. fi
  68. done
  69. #(4)备份完成后,释放锁
  70. mysql -u${username} -e "unlock tables;" 2>/dev/null
  71. #(5)将拷贝的文件打包,并删除之前拷贝的binlog日志
  72. cd $backup_bin && tar zcvf mysql_binlog_$(date +%F).tar.gz mysql-bin* && find $backup_bin -type f -name "mysql-bin*"|xargs rm -f
  73. #(6)通过rsync远程备份到备份服务器上面
  74. rsync -az --no-o --no-g $backup_bin rsync_backup@$backup_host::backup/ --password-file=/etc/rsync.password
  75. }
  76. #只保留服务器最新一次的数据
  77. host_rm_file() {
  78. find $backup_dir -type f -name "*.sql.gz" -mtime +15|xargs rm -f
  79. find $backup_bin -type f -name "*.tar.gz" -mtime +15|xargs rm -f
  80. }
  81. #定期清除远程服务器上1个月以前的历史数据
  82. backup_rm_file() {
  83. ssh -p 2224 root@172.20.62.224 'find /home/users/backup/172.20.62.117/mysql -type f -name "*.sql.gz"' -mtime +30|xargs rm -f
  84. ssh -p 2224 root@172.20.62.224 'find /home/users/backup/172.20.62.117/mysql_binlog -type f -name "*.sql.gz"' -mtime +30|xargs rm -f
  85. }
  86. if [ $now_date -eq 14 -o $now_date -eq 28 ];then
  87. mysql_dump
  88. fi
  89. incre_backup
  90. host_rm_file
  91. backup_rm_file

第八题 监控502

  1. #!/bin/bash
  2. while true:do
  3. LOG=`tail -300 /iflytek/nginx/logs/access.log |grep " 502 "|wc -l`
  4. if [ -z $LOG ];then
  5. exit 1
  6. fi
  7. if [ $LOG -ge 100 ];then
  8. /iflytek/php/sbin/php-fpm restart
  9. php_fmp_num=$(pgrep -l php-fpm|wc -l)
  10. if [ $php_fmp_num -eq 0 ];then
  11. echo "服务未启动,请查看"
  12. exit 2
  13. fi
  14. fi
  15. sleep 10
  16. done

第九题 输出小于6的单词

  1. #!/bin/bash
  2. for n in Bash also interprets a number of multi-charactor options.;do
  3. m=`echo $n|wc -L`
  4. if [ $m -lt 6 ];then
  5. echo $n
  6. fi
  7. done

第十题 批量删除用户

  1. #!/bin/bash
  2. [ -f /etc/init.d/functions ] && . /etc/init.d/functions
  3. for user in oldboy{01..10}
  4. do
  5. id $user &> /dev/null
  6. if [ $? -ne 0 ];then
  7. useradd $user
  8. password=`mkpasswd -l 8`
  9. echo "$password"|passwd --stdin $user
  10. echo "$user $password" >>/tmp/password.txt
  11. action "$user 创建" /bin/true
  12. else
  13. action "$user 创建" /bin/false
  14. fi
  15. done