博客
关于我
Linux中常用的Shell脚本(运维+常用)汇总
阅读量:803 次
发布时间:2023-02-03

本文共 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/

你可能感兴趣的文章
mysql备份与恢复
查看>>
mysql备份工具xtrabackup
查看>>
mysql备份恢复出错_尝试备份/恢复mysql数据库时出错
查看>>
mysql复制内容到一张新表
查看>>
mysql复制表结构和数据
查看>>
mysql复杂查询,优质题目
查看>>
MySQL外键约束
查看>>
MySQL多表关联on和where速度对比实测谁更快
查看>>
MySQL多表左右连接查询
查看>>
mysql大批量删除(修改)The total number of locks exceeds the lock table size 错误的解决办法
查看>>
mysql如何做到存在就更新不存就插入_MySQL 索引及优化实战(二)
查看>>
mysql如何删除数据表,被关联的数据表如何删除呢
查看>>
MySQL如何实现ACID ?
查看>>
mysql如何记录数据库响应时间
查看>>
MySQL子查询
查看>>
Mysql字段、索引操作
查看>>
mysql字段的细节(查询自定义的字段[意义-行列转置];UNION ALL;case-when)
查看>>
mysql字段类型不一致导致的索引失效
查看>>
mysql字段类型介绍
查看>>
mysql字段解析逗号分割_MySQL逗号分割字段的行列转换技巧
查看>>