博客
关于我
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、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>