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

本文共 3523 字,大约阅读时间需要 11 分钟。

运维脚本与服务器管理技巧

在实际的服务器管理中,运维脚本是维护服务器运行正常的重要工具。以下是一些常用的脚本示例,以及其他实用的技术技巧。

(1)监控服务器性能

监控服务器的CPU和内存使用率是保证服务器稳定运行的基础。以下是一个简单的脚本示例:

#!/bin/bash
cpu_threshold=80
mem_threshold=80
# 获取CPU和内存使用率
cpu_usage=$(top -bn 1 | 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/bash
backup_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/bash
log_file="/var/log/myapp.log"
max_size=10485760 # 10 MB
if [ -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"
fi
fi

(4)磁盘监控

磁盘空间不足是服务器运行中常见的问题。以下是一个磁盘使用监控脚本:

#!/bin/bash
threshold=90
df -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

以上是一些常用的运维脚本和技术技巧。如果需要帮助编写特定脚本,可以随时联系!

转载地址:http://qszfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现优先队列算法(附完整源码)
查看>>
Objective-C实现伽玛Gamma函数(附完整源码)
查看>>
Objective-C实现伽玛Gamma函数(附完整源码)
查看>>
Objective-C实现位置型pid算法(附完整源码)
查看>>
Objective-C实现位置型pid算法(附完整源码)
查看>>
Objective-C实现低通滤波器(附完整源码)
查看>>
Objective-C实现余弦cosx函数(附完整源码)
查看>>
Objective-C实现余数定理算法(附完整源码)
查看>>
Objective-C实现使用 2 个堆栈形成队列算法(附完整源码)
查看>>
Objective-C实现使用 radix-2 快速傅里叶变换的快速多项式乘法算法(附完整源码)
查看>>
Objective-C实现使用 ziggurat() 作为 OpenMP 并行程序中的随机数生成器 (RNG)(附完整源码)
查看>>
Objective-C实现使用DisjointSet 检测无向循环算法(附完整源码)
查看>>
Objective-C实现使用Prim算法确定图的最小生成树算法(附完整源码)
查看>>
Objective-C实现使用二元运算符将两个数字相加fullAdder算法(附完整源码)
查看>>
Objective-C实现使用分而治之找到单峰列表的峰值算法(附完整源码)
查看>>
Objective-C实现使用数组实现约瑟夫环(附完整源码)
查看>>
Objective-C实现使用欧几里得除法的 a/b 的十进制扩展算法(附完整源码)
查看>>
Objective-C实现使用矩阵求幂的第 n 个斐波那契算法(附完整源码)
查看>>
Objective-C实现使用管道重定向进程输入输出(附完整源码)
查看>>
Objective-C实现倒计时(附完整源码)
查看>>