在Linux服务器上实现自动重启的脚本可以使用Shell脚本编写并结合cron作业调度器
如果你在运行脚本时出现了 bc: command not found 的错误,这说明你的系统中没有安装 bc 工具,
bc 是一个用于数学计算的命令行工具,我们需要使用它来进行浮点数比较。
# Debian/Ubuntu
sudo apt-get install bc
# CentOS/RHEL
sudo yum install bc
创建脚本
创建一个Shell脚本文件,比如 auto_restart.sh
脚本会在 CPU 或内存使用率超过阈值
时发送一条通知,
并在重启服务器
时发送另一条通知。
#!/bin/bash
# 重启条件为 30分钟内CPU或内存资源占用超过80%
# 定义 CPU 和内存的阈值
cpu_threshold=80
mem_threshold=80
# 定义重启间隔时间
restart_interval=1800 # 30分钟,单位为秒
# 钉钉机器人的 Webhook 地址
dingding_webhook="https://oapi.dingtalk.com/robot/send?access_token=your_access_token"
# 发送钉钉通知的函数
send_dingding_notification() {
local message="$1"
curl -H "Content-Type: application/json" -X POST -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"$message\"}}" $dingding_webhook
}
echo "Auto Reboot Script: Monitoring CPU and memory usage..."
# 循环检测 CPU 和内存使用率
while true; do
# 获取当前 CPU 使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# 获取当前内存使用率
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
# 显示当前 CPU 和内存使用率
echo "Current CPU usage: $cpu_usage%"
echo "Current memory usage: $mem_usage%"
# 如果 CPU 或内存使用率超过阈值,则开始计时
if [ $(echo "$cpu_usage > $cpu_threshold || $mem_usage > $mem_threshold" | bc) -eq 1 ]; then
echo "CPU or memory usage is above threshold. Monitoring for continuous high usage..."
# 此处通知可以删除,只要达到阈值就会通知
send_dingding_notification "CPU or memory usage is above threshold. Monitoring for continuous high usage..."
start_time=$(date +%s)
# 在重启间隔时间内持续检测 CPU 和内存使用率
while true; do
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
# 如果持续时间超过重启间隔时间,则重启服务器
if [ $elapsed_time -ge $restart_interval ]; then
echo "CPU or memory usage has been continuously high for $((restart_interval / 60)) minutes. Restarting the server..."
# 此处通知只在重启时调用
send_dingding_notification "CPU or memory usage has been continuously high for $((restart_interval / 60)) minutes. Restarting the server..."
shutdown -r now
break
fi
# 检测 CPU 和内存使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
# 如果 CPU 和内存使用率都低于阈值,则跳出循环
if [ $(echo "$cpu_usage <= $cpu_threshold && $mem_usage <= $mem_threshold" | bc) -eq 1 ]; then
break
fi
sleep 10 # 每10秒检测一次
done
fi
# 每5分钟显示一次当前使用率
sleep 300 # 300秒 = 5分钟
done
授予脚本执行权限
chmod +x auto_restart.sh
创建服务单元
创建一个服务单元文件,比如 /etc/systemd/system/auto_reboot_script.service,内容如下:
替换 /path/to/your/auto_reboot_script.sh 为你的脚本的实际路径。
[Unit]
Description=Auto Reboot Script Service
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash /path/to/your/auto_reboot_script.sh
Restart=always
[Install]
WantedBy=multi-user.target
启动服务
sudo systemctl enable auto_reboot_script.service
sudo systemctl start auto_reboot_script.service
检查运行状态
sudo systemctl status auto_reboot_script.service
此处评论已关闭