第一题 每日一文件
#!/bin/bash
date_log=$(date +%F)
dir=/data/log/disklog
[ -d $dir ] || mkdir -p $dir
df -h > /$dir/$date_log.log
第二题 统计访问量
#!/bin/bash
#统计nginx访问日志
if [ $# -ne 1 ];then
echo "请输入nginx的访问日志文件"
exit 1
fi
awk '{print $1}' $1 |sort|uniq -c|sort -rn
第三题 统计内存
#!/bin/bash
mem_num=$(ps aux|sed 1d|awk '{print $6}')
num=0
for i in $mem_num;do
num=$((num+i))
done
echo "$((num/1024/1024))"
第四题 监控机器存活
#!/bin/bash
read -p "请输入IP地址:" IP
if [ -z $IP ];then
echo "输入的IP不能为空..."
exit 1
fi
VALID_CHECK=$(echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if [ ${VALID_CHECK:-no} == "yes" ]; then
num=`ping -c5 $IP|grep packet|awk -F "[%]" '{print $NR}'|awk -F ',' '{print $NF}'`
if [ $num -ge 50 ];then
echo "$IP已断开"
else
echo "$IP正常"
fi
else
echo "$IP输入错误"
fi
第五题 批量修改文件
#!/bin/bash
path=/123
find "$path" -type f -name "*.txt"|xargs -i mv {} {}.bak
cd /
tar zcvf $path/123.tar.gz 123
cd /123
rename ".bak" "" *
第六题 检测nginx端口
#!/bin/bash
duankou=`ss -lntp|grep 80|wc -l`
if [ $duankou -ne 1 ];then
echo "Nginx error"
else
echo "Nginx 正常"
fi
[ro
第七题 Mysql备份
#!/bin/bash
##################################################################################
# [功能说明]
#==========================================================================
# 1.每个月的14号、28号的晚上23:45进行全量备份;
# 2.备份完成后,只保留最新的备份数据;
# 3.将最新的备份文件上传到远程备份服务器中,远程备份服务器地址为172.20.62.224
# [使用说明]
#==========================================================================
# 1.打开/etc/crontab/ 添加如下定时任务,每天晚上23:45分执行;
# 45 23 * * * /bin/bash /scripts/dbbackup.sh &> /dev/null
# (请先通过service crond status 确保crond服务已经有启动。);
# 2.请根据环境设置好[参数列表]中的参数。
#==========================================================================
# [参数列表]
#==========================================================================
# 1. username : 数据库用户名;
# 2. password : 数据库密码;
# 3. baseDir : 备份数据存储的基目录,全量数据存储于
# 4. backup_host : 备份服务器地址
# ******************需要设置的变量参数**************************************
#日期
now_date=$(date +%d)
#mysql数据库用户名
username="root"
#备份文件存储目录
backup_dir=/home/data/backup/mysql
#binlog备份文件存储目录
backup_bin=/home/data/backup/mysql_binlog
#数据库连接命令
MYCMD="mysql -u$username"
#数据库备份命令
MYDUMP="mysqldump -u$username -x -B -F -R -E --master-data=2 --triggers --flush-privileges --default-character-set=utf8 --hex-blob"
#备份服务器地址
backup_host="172.20.62.224"
# binlog的目录及文件
binlog_path=/opt/software/mysql
binFile=/opt/software/mysql/mysql-bin.index
#全量备份mysql数据,并远程推送至备份服务器
mysql_dump() {
[ ! -d $backup_dir ] && mkdir -p $backup_dir
#DBLIST=`$MYCMD -e "show databases;"|sed 1d|egrep "^ag_*|^huiche*|^jd_gaosu$|^jiading_keyikao$|^jingan$|^ping$|^zvic-dev-*"`
DBLIST=`$MYCMD -e "show databases;"|sed 1d|egrep "^jiading_keyikao$|^jingan$"`
for dbname in $DBLIST;do
[ ! -d $backup_dir/$dbname ] && mkdir -p $backup_dir/$dbname
$MYDUMP $dbname|gzip >$backup_dir/$dbname/${dbname}_$(date +%F).sql.gz
done
rsync -az --no-o --no-g $backup_dir rsync_backup@$backup_host::backup/ --password-file=/etc/rsync.password
}
#增量备份数据,并远程推送至备份服务器
incre_backup() {
[ ! -d $backup_bin ] && mkdir -p $backup_bin
#(1)拷贝binlog前先锁定表,以防备份期间数据的写入
mysql -u${username} -e "flush tables with read lock;" 2>/dev/null
#(2)将缓存中的数据更改写到binlog中,并生产一个新的mysql-bin.00000*文件
mysqladmin -u${username} flush-logs 2>/dev/null
counter=$(wc -l $binFile | awk '{print $1}')
nextNum=0
#(3)将除刚产生的binlog文件外的所有文件拷贝到备份目录中
for file in `cat $binFile`;do
baseFile=$(basename $file)
nextNum=$(($nextNum + 1))
if [ $nextNum -eq $counter ];then
break
else
cp $binlog_path/$baseFile $backup_bin
fi
done
#(4)备份完成后,释放锁
mysql -u${username} -e "unlock tables;" 2>/dev/null
#(5)将拷贝的文件打包,并删除之前拷贝的binlog日志
cd $backup_bin && tar zcvf mysql_binlog_$(date +%F).tar.gz mysql-bin* && find $backup_bin -type f -name "mysql-bin*"|xargs rm -f
#(6)通过rsync远程备份到备份服务器上面
rsync -az --no-o --no-g $backup_bin rsync_backup@$backup_host::backup/ --password-file=/etc/rsync.password
}
#只保留服务器最新一次的数据
host_rm_file() {
find $backup_dir -type f -name "*.sql.gz" -mtime +15|xargs rm -f
find $backup_bin -type f -name "*.tar.gz" -mtime +15|xargs rm -f
}
#定期清除远程服务器上1个月以前的历史数据
backup_rm_file() {
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
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
}
if [ $now_date -eq 14 -o $now_date -eq 28 ];then
mysql_dump
fi
incre_backup
host_rm_file
backup_rm_file
第八题 监控502
#!/bin/bash
while true:do
LOG=`tail -300 /iflytek/nginx/logs/access.log |grep " 502 "|wc -l`
if [ -z $LOG ];then
exit 1
fi
if [ $LOG -ge 100 ];then
/iflytek/php/sbin/php-fpm restart
php_fmp_num=$(pgrep -l php-fpm|wc -l)
if [ $php_fmp_num -eq 0 ];then
echo "服务未启动,请查看"
exit 2
fi
fi
sleep 10
done
第九题 输出小于6的单词
#!/bin/bash
for n in Bash also interprets a number of multi-charactor options.;do
m=`echo $n|wc -L`
if [ $m -lt 6 ];then
echo $n
fi
done
第十题 批量删除用户
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
for user in oldboy{01..10}
do
id $user &> /dev/null
if [ $? -ne 0 ];then
useradd $user
password=`mkpasswd -l 8`
echo "$password"|passwd --stdin $user
echo "$user $password" >>/tmp/password.txt
action "$user 创建" /bin/true
else
action "$user 创建" /bin/false
fi
done