#写自定义的监控脚本---内存或者cpu占用超过80发邮件提醒
#!/bin/bash
#内存使用率
total=`free -m |awk '/Mem/ {print $2}'`
#已用内存
used=`free -m |awk '/Mem/ {print $3}'`
#空闲内存
free=`free -m |awk '/Mem/ {print $4}'`
#共享内存
shared=`free -m|awk '/Mem/ {print $5}'`
ratef=$(printf "%.4f" $(echo "scale=4; $used / $total" | bc))
rate=$(printf "%.2f" "$(echo "$ratef*100"|bc)")
#cpu
cpu=`top -n 1|grep "%Cpu(s)" |awk '{print $4}'`
send_mail(){
recpient=xxxxxxxx@qq.com
subject=$warning
body=$event
echo "$body" |mail -s "$subject" $recpient
}
#判断内存情况
if (( $(echo "$rate > 80"|bc) ));then
echo -e "内存占用达到$rate%\n启动告警!!!"
warning=`echo "内存告警,请及时优化"`
event=` echo "内存占用达到$rate%"`
send_mail
else
echo "内存占用达到$rate%"
fi
#判断cpu情况
if (( $(echo "$cpu > 5"|bc) )); then
echo -e "当前cpu已经到达阈值$cpu%\n"
warning=`echo "cpu告警,请及时优化"`
event=`echo "cpu 已经到达$cpu%"`
send_mail
else
echo "cpu占用达到$cpu%"
fi
#定期删除30天内无变动日志文件
#!/bin/bash
log_dir="/var/log"
log_txt=`find /var/log -type f -name "*.log" -mtime +30`
echo "近30天未改動的日誌:$log_txt"
find $log_dir -type f -name "*.log" -mtime +30 -exec rm {} \;
echo “$log_txt” | mail -s "近30天未改動日誌已經被刪除" xxxxxxx@qq.com
#自动化创建linux用户
#!/bin/bash
read -p "请问宁要创建几个用户:" count
for ((i=1; i<=$count; i++))
do
user_list=`cat /etc/passwd|awk -F : '$6 ~ /\/home/ {print $1}'`
echo "已存在用户表:$user_list"
while true; do
read -p "请输入你要创建的用户名:" username
if [ -z "$username" ];then
echo "用户名不能为空"
elif echo "$user_list"|grep -q "^$username$";then
echo "该用户已经存在!"
else
echo "用户【$username】已经创建!"
break
fi
done
while true; do
read -p "请输入第$i个用户的密码(至少8位且至少一个数字一个字母和一个特殊符号):" password
if [[ $password =~ [0-9] && $password =~ [a-zA-Z] && $password =~ [_!@#$%,\.] && ${#password} -gt 8 ]];then echo "ok"
break
else
echo "格式不对!"
fi
done
done
#检测服务器中重要的文件是否被修改过,如果修改则报警(指纹:md5sum比对)
#!/bin/bash
# 定义重要文件的路径和对应的指纹
declare -A important_files=(
["/etc/passwd"]="345d70772d9cf0a5471e5e4f43d43a3d"
["/root/file.txt"]="cfc03641afbbaa0a63d5712ea56e1688"
)
# 检测文件是否被修改
for file in "${!important_files[@]}"; do
# 计算当前文件的指纹
current_finger=$(md5sum "$file" | awk '{print $1}')
# 比较当前指纹和预设的指纹
if [[ "$current_finger" != "${important_files[$file]}" ]]; then
echo "文件$file 已经被修改,请尽快处理!"|mail -s "警报--finger" xxxxxxx@qq.com
fi
done
#计算nginx日志中访问最多的ip使用的
#nginx中的access.log日志位置
access_log="/usr/local/nginx/logs/access.log"
#筛选ip
ip_list=`cat $access_log|awk '{print $1}'`
#排列
sort_list=`echo -e "$ip_list\n"|sort |uniq -c|sort -rk1n|awk 'NR>1 {print $0}'`
echo -e "访问量最大的10个ip\n$sort_list"
#防止ddos攻击,将单位时间内访问量过大的进行封禁
#!/bin/bash
access_log="/usr/local/nginx/logs/access.log"
ban_time=60
access_time=100
ip_list=$(awk '{ ip[$1]++ } END {for (i in ip) print i,ip[i] }' "$access_log")
while IFS= read -r line;
do
ip=$(echo "$line" |awk '{print $1}')
pv=$(echo "$line" |awk '{print $2}')
if [ "$pv" -gt "$access_time" ];then
echo "访问量过大"
iptables -A INPUT -s "$ip" -j DROP
echo "已经封禁$ip"
sleep "$ban_time"
iptables -D INPUT -s "$ip" -j DROP
echo "已经解封$ip"
fi
done <<< "$ip_list"
扩展:甚至可以将创建恶意ip名单-bad_ip
# echo "192.168.1.4" >> bad_ip --- 加入黑名单
# sed -i '/192.168.1.4/d' bad_ip --- 移除黑名单
#MYSQL备份和恢复脚本
#任务计划:
crontab -e---进入编辑
* * * * * /path/to/bash---分时日月周 命令或者执行sh
ctrl+o---保存
回车
ctrl+x---退出
#msyql备份:
全量备份:
mysqldump -u【root】 -p【password】 -B mydb > mydb.sql
恢复:
mysql -u【root】 -p【password】 < mydb.sql
#cat mysql_back.sh
#!/bin/bash
#mysql数据库信息
username="root"
password="XXXXXXXXX"
db_name="mydb"
#默认备份文件目录
back_up_dir="/root/back_up_dir"
mkdir back_up_dir -p
#默认备份文件文件名
back_up_file="$back_up_dir/back_up_$(date +%y%m%d_%H%M)_${db_name}.sql"
echo "$back_up_file"
#使用mysqldump备份
mysqldump -u$username -p$password $db_name >$back_up_file
#检查备份是否成功
if [ $? -eq 0 ];then
echo "数据库备份成功:$back_up_file"
else
echo "数据库备份失败"
echo "错误码:$?"
fi
# crontab -l|grep -v '^#'
0 13 * * * /bin/bash /root/mysql_back.sh
# ll
总用量 8
-rw-r--r-- 1 root root 7952 3月 30 13:00 back_up_240330_1300_mydb.sql