本文共 3014 字,大约阅读时间需要 10 分钟。
废话不多说,直接上干货!
一、运维脚本
(1)监控CPU和内存的使用情况
#!/bin/bashcpu_threshold=80mem_threshold=80# 获取CPU和内存使用率cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')# 检查CPU使用率if (( $(echo "$cpu_usage > $cpu_threshold" | bc -l) )); then echo "CPU usage is above threshold: $cpu_usage%"fi# 检查内存使用率if (( $(echo "$mem_usage > $mem_threshold" | bc -l) )); then echo "Memory usage is above threshold: $mem_usage%"fi
(2)定期备份到指定目录脚本
#!/bin/bashbackup_source="/path/to/source"backup_dest="/path/to/backup"timestamp=$(date +"%Y%m%d%H%M")# 创建备份tar -czf "$backup_dest/backup_$timestamp.tar.gz" -C "$backup_source" .# 删除7天前的备份find "$backup_dest" -type f -name "*.tar.gz" -mtime +7 -exec rm {} \;
(3)自动轮转、压缩和删除旧日志
#!/bin/bashlog_file="/var/log/myapp.log"max_size=10485760 # 10 MBif [ -f "$log_file" ]; then log_size=$(stat -c%s "$log_file") if [ "$log_size" -ge "$max_size" ]; then mv "$log_file" "$log_file.old" touch "$log_file" gzip "$log_file.old" fifi
(4)磁盘监控脚本
#!/bin/bashthreshold=90df -H | awk '{if ($5 > threshold) print $0}' | while read line; do echo "Disk space alert: $line"done
二、常用其他脚本
(1)输出不同颜色的提示语
#打印不同颜色方法echo_color() { if [ $1 == "green" ]; then echo -e "\033[32;40m$2\033[0m" elif [ $1 == "red" ]; then echo -e "\033[31;40m$2\033[0m" elif [ $1 == "yellow" ]; then echo -e "\033[33;40m$2\033[0m" elif [ $1 == "blue" ]; then echo -e "\033[34;40m$2\033[0m" fi}
(2)检测IP格式合规性
# 函数:检测IP格式is_valid_ip() { local ip="$1" [[ "$ip" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]] && return 0 || return 1}
(3)检测端口合规性
# 函数:检测端口号is_valid_port() { local port="$1" [[ "$port" =~ ^[0-9]+$ ]] && [ "$port" -ge 1 ] && [ "$port" -le 65535 ] && return 0 || return 1}
(4)检测某端口是否已存在
check_port(){ check_port=$1 check_result="$(netstat -tunlp|grep -w ${check_port} |awk '{print $7}'|cut -d/ -f1)" if [[ -n "$check_result" ]];then echo "$check_port端口已被占用" exit 1 else echo "端口:$check_port,可用" fi}
(5)设置某个服务开机自启动
#根据服务名称设置服务开机自启动set_service_on(){ service_name=$1 chmod 644 /lib/systemd/system/${service_name}.service chown root:root /lib/systemd/system/${service_name}.service systemctl daemon-reload systemctl restart ${service_name} systemctl enable ${service_name}}
(6)获取当前服务器时间(标准格式)
time=`date "+%Y-%m-%d^%H:%M:%S"`
(7)检查服务在线状态(端口和进程)
#被检测服务的端口号PORT="10000"#被检测服务的java程序COUNT="$(ps -ef|grep "xxxxxxxxxxxxxxxxx.jar"|grep -v grep|wc -l)"if [[ -n "$PORT" ]];then echo "服务正常启动"elif [[ $COUNT -eq 1 ]]; then echo "服务正在启动中,请稍后... ..."else echo "服务异常,请重启服务"fi
(8)执行简单的定时任务
while true; do echo "Running task at $(date)" sleep 60 # 每60秒执行一次done
(9)并行执行多个命令
{ sleep 2 echo "Task 1 completed"} & { sleep 3 echo "Task 2 completed"}wait # 等待所有后台任务完成echo "All tasks completed."
(10)使用条件语句进行文件(文件夹)判别
if [ -f "myfile.txt" ]; then echo "File exists."elif [ -d "mydir" ]; then echo "It's a directory."else echo "File or directory does not exist."fi
若有需要帮忙写的Shell脚本,可以留言!
转载地址:http://qszfk.baihongyu.com/