云计算百科
云计算领域专业知识百科平台

OpenClaw技能实战:nanobot通过cron定时任务自动推送服务器健康日报

OpenClaw技能实战:nanobot通过cron定时任务自动推送服务器健康日报

1. 项目背景与需求场景

在日常服务器运维工作中,及时了解服务器健康状态至关重要。传统方式需要手动登录服务器查看各项指标,既费时又容易遗漏关键信息。通过nanobot结合cron定时任务,我们可以实现服务器健康日报的自动推送,让重要信息主动找到我们。

nanobot是一个超轻量级的人工智能助手,仅需约4000行代码就能提供核心代理功能。它内置了vllm部署的Qwen3-4B-Instruct-2507模型,使用chainlit进行推理交互,还支持自行配置QQ聊天机器人。这个轻量级特性使得它非常适合作为定时任务的执行引擎。

想象一下这样的场景:每天早晨,你还没到办公室,手机QQ就收到了服务器自动发送的健康报告,包括CPU使用率、内存状态、磁盘空间、服务运行状态等关键信息。这就是本教程要实现的效果。

2. 环境准备与nanobot基础

2.1 确认nanobot部署状态

首先确保nanobot已经正确部署。通过webshell查看模型服务日志:

cat /root/workspace/llm.log

如果看到模型加载成功的相关信息,说明部署正常。通常会有类似"model loaded successfully"或"inference server started"的日志条目。

2.2 测试chainlit交互

使用chainlit测试nanobot的基本功能:

chainlit run app.py

在交互界面中尝试提问,比如:"使用nvidia-smi看一下显卡配置",确认nanobot能够正常响应并执行命令。

2.3 配置QQ机器人(可选但推荐)

如果需要通过QQ接收日报,需要配置QQ机器人:

  • 访问QQ开放平台(https://q.qq.com/#/apps)注册开发者账号
  • 创建机器人应用,获取AppID和AppSecret
  • 修改nanobot配置文件:
  • vim /root/.nanobot/config.json

    在channels部分添加QQ配置:

    {
    "channels": {
    "qq": {
    "enabled": true,
    "appId": "YOUR_APP_ID",
    "secret": "YOUR_APP_SECRET",
    "allowFrom": []
    }
    }
    }

  • 启动gateway服务:
  • nanobot gateway

    3. 创建服务器健康检查脚本

    3.1 编写健康检查脚本

    创建健康检查脚本,收集关键服务器指标:

    vim /root/scripts/health_check.sh

    脚本内容如下:

    #!/bin/bash

    # 获取当前时间
    DATE=$(date "+%Y-%m-%d %H:%M:%S")

    # 收集系统信息
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | awk -F'%' '{print $1}')
    MEM_USAGE=$(free | grep Mem | awk '{printf("%.2f"), $3/$2 * 100}')
    DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}')
    UPTIME=$(uptime | awk '{print $3}' | tr -d ',')

    # 获取服务状态(示例:nginx和docker)
    NGINX_STATUS=$(systemctl is-active nginx 2>/dev/null || echo "not installed")
    DOCKER_STATUS=$(systemctl is-active docker 2>/dev/null || echo "not installed")

    # 获取GPU信息(如果存在)
    if command -v nvidia-smi &> /dev/null; then
    GPU_INFO=$(nvidia-smi –query-gpu=utilization.gpu,memory.used,memory.total –format=csv,noheader,nounits | head -1)
    GPU_USAGE=$(echo $GPU_INFO | awk -F', ' '{print $1"%"}')
    GPU_MEMORY=$(echo $GPU_INFO | awk -F', ' '{print $2"/"$3"MB"}')
    else
    GPU_USAGE="N/A"
    GPU_MEMORY="N/A"
    fi

    # 生成报告内容
    REPORT="🖥️ 服务器健康日报 – $DATE
    —————————–
    📊 CPU使用率: ${CPU_USAGE}%
    💾 内存使用率: ${MEM_USAGE}%
    💿 磁盘使用率: ${DISK_USAGE}
    ⏰ 运行时间: ${UPTIME}天

    🔧 服务状态:
    Nginx: ${NGINX_STATUS}
    Docker: ${DOCKER_STATUS}

    🎮 GPU状态:
    使用率: ${GPU_USAGE}
    显存: ${GPU_MEMORY}

    ⚠️ 注意: 磁盘使用率超过80%或内存使用率超过90%时需要关注"

    echo "$REPORT"

    给脚本添加执行权限:

    chmod +x /root/scripts/health_check.sh

    3.2 测试脚本运行

    手动运行脚本测试效果:

    /root/scripts/health_check.sh

    应该能看到格式化的服务器健康信息输出。如果有任何错误,根据报错信息调整脚本。

    4. 配置cron定时任务

    4.1 设置每日定时任务

    通过crontab设置每天定时执行任务:

    crontab -e

    添加以下内容,表示每天上午9点执行健康检查:

    # 每天上午9点执行服务器健康检查
    0 9 * * * /root/scripts/health_check.sh > /tmp/daily_health_report.txt

    4.2 通过nanobot推送报告

    创建推送脚本,使用nanobot将报告发送到QQ:

    vim /root/scripts/send_report.sh

    脚本内容:

    #!/bin/bash

    # 生成健康报告
    /root/scripts/health_check.sh > /tmp/daily_health_report.txt

    # 读取报告内容
    REPORT_CONTENT=$(cat /tmp/daily_health_report.txt)

    # 使用nanobot发送到QQ
    # 这里假设nanobot提供了命令行接口来发送消息
    # 实际命令需要根据nanobot的具体接口调整
    curl -X POST http://localhost:8000/send-message \\
    -H "Content-Type: application/json" \\
    -d "{
    \\"channel\\": \\"qq\\",
    \\"message\\": \\"$REPORT_CONTENT\\"
    }"

    更新crontab,先生成报告再发送:

    0 9 * * * /root/scripts/send_report.sh

    4.3 测试定时任务

    手动测试cron任务是否正常工作:

    # 立即执行一次测试
    /root/scripts/send_report.sh

    # 检查cron日志确认任务设置
    tail -f /var/log/cron

    5. 进阶功能与优化建议

    5.1 添加异常报警机制

    在健康检查脚本中添加异常检测,当某些指标超过阈值时发送紧急报警:

    # 在health_check.sh末尾添加
    ALERT=""
    if [ ${CPU_USAGE%.*} -gt 90 ]; then
    ALERT="${ALERT}🚨 CPU使用率超过90%!\\n"
    fi

    if [ ${MEM_USAGE%.*} -gt 90 ]; then
    ALERT="${ALERT}🚨 内存使用率超过90%!\\n"
    fi

    if [ ! -z "$ALERT" ]; then
    echo -e "\\n${ALERT}" >> /tmp/daily_health_report.txt
    fi

    5.2 支持多种推送渠道

    除了QQ,还可以添加其他推送方式,比如邮件、Slack、钉钉等。在nanobot配置文件中添加相应渠道配置即可。

    5.3 历史数据记录与分析

    添加简单的历史数据记录功能,便于趋势分析:

    # 在send_report.sh中添加
    DATE=$(date "+%Y-%m-%d")
    echo "$DATE,${CPU_USAGE},${MEM_USAGE},${DISK_USAGE}" >> /root/scripts/health_history.csv

    5.4 自定义检查项

    根据实际需求添加自定义检查项,比如:

    • 特定服务进程检查
    • 网络连通性测试
    • 证书过期检查
    • 备份状态验证

    6. 常见问题与解决方法

    6.1 权限问题

    确保脚本有执行权限,并且cron任务有足够的权限访问所需资源:

    # 检查脚本权限
    ls -la /root/scripts/

    # 如果需要,添加执行权限
    chmod +x /root/scripts/*.sh

    6.2 环境变量问题

    cron执行环境与交互shell不同,可能需要显式设置环境变量:

    # 在脚本开头添加必要的环境变量
    export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

    6.3 nanobot连接问题

    如果nanobot服务未启动,推送会失败。可以添加服务状态检查:

    # 检查nanobot服务状态
    if ! pgrep -f "nanobot gateway" > /dev/null; then
    nanobot gateway &
    sleep 5
    fi

    6.4 日志记录与监控

    添加详细的日志记录,便于排查问题:

    # 在脚本中添加日志记录
    LOG_FILE="/root/scripts/cron.log"
    echo "$(date): 开始执行健康检查" >> $LOG_FILE

    # 记录执行结果
    if [ $? -eq 0 ]; then
    echo "$(date): 健康检查执行成功" >> $LOG_FILE
    else
    echo "$(date): 健康检查执行失败" >> $LOG_FILE
    fi

    7. 总结

    通过本教程,我们实现了使用nanobot和cron定时任务自动推送服务器健康日报的功能。这个方案有以下几个优点:

    轻量高效:nanobot仅需约4000行代码,资源占用极小,适合长期运行 灵活可扩展:可以根据需要添加各种检查项和推送渠道 及时可靠:每天自动推送,不再需要手动检查服务器状态 智能集成:结合AI能力,未来可以添加智能分析和预测功能

    实际部署时,建议先充分测试各个组件的工作状态,确保cron任务能够正常执行,nanobot能够成功推送消息。根据服务器实际情况调整检查项目和阈值,使日报内容既全面又不会产生过多干扰信息。

    这个方案不仅适用于个人服务器,经过适当调整后也可以用于企业环境的监控预警,帮助运维团队更高效地管理工作负载。


    获取更多AI镜像

    想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » OpenClaw技能实战:nanobot通过cron定时任务自动推送服务器健康日报
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!