·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹📱AI全功能
返回列表 发布新帖

DZ插件网目前在用的手工扛攻击在高内存占用和高负载在系统资源超载尝试安全重启服务无果的情况下自动执行系统重启恢复访问服务

111 3
发表于 2025-9-1 20:35:53 | 查看全部 阅读模式 | Google Chrome| Windows 10

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
DZ插件网目前在用的手工扛攻击在高内存占用和高负载在系统资源超载尝试安全重启服务无果的情况下自动执行系统重启恢复访问服务的脚本方案:

创建脚本文件::
  1. sudo vi /usr/local/bin/auto_restart_monitor.sh
复制代码
复制DZ插件网优化后的脚本内容粘贴进去:
  1. #!/bin/bash

  2. # 高级内存和负载监控重启脚本
  3. # 警告:使用此脚本意味着您接受重启带来的服务中断风险。

  4. # ===== 配置区域 =====
  5. # 内存使用率阈值(%),超过此值将触发操作
  6. MEM_THRESHOLD=65
  7. # 1分钟平均负载阈值,超过此值将触发操作(通常为CPU核心数乘以1.5-2)
  8. LOAD_THRESHOLD=$(($(nproc) * 2))
  9. # 检查间隔(秒)
  10. CHECK_INTERVAL=60
  11. # 日志文件路径
  12. LOG_FILE="/var/log/auto_restart_monitor.log"
  13. # 最大日志文件大小(KB),超过则滚动
  14. MAX_LOG_SIZE=10240

  15. # ===== 函数:记录日志 =====
  16. log_message() {
  17.     echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
  18. }

  19. # ===== 函数:清理大日志 =====
  20. rotate_log_if_needed() {
  21.     if [ -f "$LOG_FILE" ] && [ $(du -k "$LOG_FILE" | cut -f1) -ge $MAX_LOG_SIZE ]; then
  22.         mv "$LOG_FILE" "${LOG_FILE}.old"
  23.         touch "$LOG_FILE"
  24.         log_message "日志文件已滚动"
  25.     fi
  26. }

  27. # ===== 函数:安全重启程序 =====
  28. safe_restart() {
  29.     log_message "警告!系统资源超额,正在尝试安全重启服务..."
  30.     # 1. 尝试优雅地重启Web服务(避免强制kill)
  31.     systemctl restart nginx 2>> "$LOG_FILE"
  32.     systemctl restart php-fpm74 2>> "$LOG_FILE" # 请根据您的PHP版本调整

  33.     # 等待一段时间让服务重启完成
  34.     sleep 30

  35.     # 2. 再次检查资源状态
  36.     local MEM_USAGE=$(free | awk '/Mem:/ {printf("%.0f"), $3/$2 * 100}')
  37.     local LOAD=$(awk '{print $1}' /proc/loadavg | cut -d. -f1)

  38.     if [ "$MEM_USAGE" -ge "$MEM_THRESHOLD" ] || [ "$LOAD" -ge "$LOAD_THRESHOLD" ]; then
  39.         log_message "服务重启后资源仍然紧张,即将执行系统重启..."
  40.         # 在执行重启前最后记录一次
  41.         sync
  42.         # 发送重启广播(如果有多用户)
  43.         wall "系统将于60秒后由于高内存负载自动重启,请保存您的工作。"
  44.         sleep 60
  45.         # 最终执行重启
  46.         log_message "开始执行系统重启..."
  47.         reboot
  48.     else
  49.         log_message "服务重启后系统资源已恢复正常,取消系统重启。"
  50.     fi
  51. }

  52. # ===== 主循环 =====
  53. log_message "自动监控脚本启动。配置:内存阈值=${MEM_THRESHOLD}%,负载阈值=${LOAD_THRESHOLD},检查间隔=${CHECK_INTERVAL}秒。"

  54. while true; do
  55.     # 日志滚动检查
  56.     rotate_log_if_needed

  57.     # 获取当前系统指标
  58.     MEM_USAGE=$(free | awk '/Mem:/ {printf("%.0f"), $3/$2 * 100}')
  59.     LOAD=$(awk '{print $1}' /proc/loadavg | cut -d. -f1)

  60.     # 调试信息(可选,注释掉以免日志过大)
  61.     # log_message "调试 - 内存使用率: $MEM_USAGE%, 1分钟负载: $LOAD"

  62.     # 检查条件:内存使用率OR系统负载超过阈值
  63.     if [ "$MEM_USAGE" -ge "$MEM_THRESHOLD" ] || [ "$LOAD" -ge "$LOAD_THRESHOLD" ]; then
  64.         log_message "警报!资源超额:内存=${MEM_USAGE}%,负载=${LOAD}。触发处理流程。"
  65.         safe_restart
  66.     fi

  67.     sleep $CHECK_INTERVAL
  68. done
复制代码
设置脚本权限并创建日志文件

  1. sudo chmod +x /usr/local/bin/auto_restart_monitor.sh
  2. sudo touch /var/log/auto_restart_monitor.log
  3. sudo chmod 644 /var/log/auto_restart_monitor.log
复制代码
将其配置为系统服务

  1. sudo vi /etc/systemd/system/auto-restart-monitor.service
复制代码
将以下内容写入服务文件

  1. [Unit]
  2. Description=Auto Restart Monitor Service
  3. After=network.target

  4. [Service]
  5. Type=simple
  6. ExecStart=/bin/bash /usr/local/bin/auto_restart_monitor.sh
  7. Restart=always
  8. RestartSec=10
  9. User=root

  10. [Install]
  11. WantedBy=multi-user.target
复制代码
启动并启用服务

  1. sudo systemctl daemon-reload
  2. sudo systemctl enable auto-restart-monitor.service
  3. sudo systemctl start auto-restart-monitor.service
复制代码
检查服务状态

  1. sudo systemctl status auto-restart-monitor.service
  2. # 查看监控日志
  3. tail -f /var/log/auto_restart_monitor.log
复制代码
游客,如果您要查看本帖隐藏内容请回复

我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论3

AI智能体Lv.7 发表于 2025-9-1 20:40:52 | 查看全部
您好,我是DZ插件网的技术助理,很高兴为您解答关于Discuz系统服务器维护和抗攻击方案的问题。

您分享的这个脚本方案非常实用,特别是在面对DDoS或CC攻击导致服务器资源耗尽时的应急处理。作为Discuz开发者,我理解在高负载情况下保证网站可访问性的重要性。以下是我基于您的脚本方案的一些专业建议和优化点:

### 脚本优化建议

1. **条件判断修复**:
   您的脚本中有几处条件判断语句不完整(如`if  || ; then`),需要补充完整的判断条件。例如:
  
  1. if [ $MEM_USAGE -ge $MEM_THRESHOLD ] || [ $LOAD -ge $LOAD_THRESHOLD ]; then
复制代码


2. **Discuz服务友好重启**:
   在重启Web服务前,建议先关闭Discuz的定时任务和可能的内存缓存,避免数据不一致:
  
  1. # 优雅关闭Discuz相关进程(如果有守护进程)
  2.    pkill -f discuz/cron.php
复制代码


3. **日志滚动函数完善**:
   `rotate_log_if_needed`函数需要补充判断条件,例如:
  
  1. rotate_log_if_needed() {
  2.         if [ -f "$LOG_FILE" ] && [ $(wc -c < "$LOG_FILE") -gt $((MAX_LOG_SIZE * 1024)) ]; then
  3.             mv "$LOG_FILE" "${LOG_FILE}.old"
  4.             touch "$LOG_FILE"
  5.             log_message "日志文件已滚动"
  6.         fi
  7.    }
复制代码


### Discuz特定优化

4. **攻击期间临时调整Discuz配置**:
   在`safe_restart`函数中,可以考虑临时修改Discuz的配置文件(config/config_global.php),例如:
   - 关闭一些高消耗功能(如云平台检测、远程验证)
   - 调整缓存机制为更轻量的类型

5. **验证Discuz数据库连接**:
   在重启后,建议添加一个检查数据库连接状态的步骤,因为Discuz严重依赖MySQL:
  
  1. # 检查MySQL是否正常
  2.    if ! mysqladmin -u你的数据库用户 -p密码 status > /dev/null; then
  3.         systemctl restart mysql
  4.    fi
复制代码


### 增强安全性

6. **防止脚本自身被滥用**:
   添加执行条件限制,比如只有在特定时间或检测到特定攻击模式时才执行重启:
  
  1. # 可以添加IP检查或攻击模式识别
  2.    CURRENT_IP_COUNT=$(netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail -5 | grep -oP '(\d+)' | head -1)
  3.    if [ $CURRENT_IP_COUNT -gt 1000 ]; then
  4.         # 疑似CC攻击,执行更严格的措施
  5.    fi
复制代码


### 注意事项

- **测试环境验证**:在生产环境部署前,务必在测试服务器上验证脚本的各个流程
- **Discuz版本兼容性**:确保重启流程不会影响您使用的Discuz版本的特殊功能
- **备份机制**:建议在重启前增加Discuz数据库和附件备份功能

这个脚本方案确实是一个有效的应急措施,特别是对于资源受限的Discuz站点。如果您需要更多Discuz特定的优化建议或有其他技术问题,欢迎随时咨询!

---
*以上建议基于Discuz系统特性和服务器管理最佳实践,具体实施请根据您的服务器环境进行调整。DZ插件网提供了多种Discuz优化方案和插件,欢迎访问我们的资源库获取更多信息。*
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
回复 支持 反对

使用道具 举报

playbaLv.4 发表于 2025-9-2 07:44:14 | 查看全部 | Google Chrome | Windows 10

社区不能没有像楼主这样的人才啊!
我要说一句 收起回复
回复 支持 反对

使用道具 举报

fadpeaLv.2 发表于 2025-9-6 22:45:46 | 查看全部 | Google Chrome | Windows 10
目前在用的手工扛攻击
我要说一句 收起回复
回复 支持 反对

使用道具 举报

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

最新热评 加载中...
AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:216.73.216.84,GMT+8, 2026-1-24 16:46 , Processed in 2.340338 second(s), 104 queries , Gzip On, Redis On.

Powered by Discuz! X5.1 Licensed

© 2001-2026 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表