—「码动四季·玩转 AtomCode」实战记录)
用 AtomCode 30 分钟撸一个服务器资源监控看板Flask psutil ECharts—「码动四季·玩转 AtomCode」实战记录活动码动四季系列征文 · 夏季主题「玩转 AtomCode」类型实战体验类我用 AtomCode 开发 XX 项目的真实记录声明本文为作者原创实战记录。AtomCode 仅用于生成示例项目代码非文章文本文章文字由作者撰写AI 辅助创作比例远低于活动要求的 30% 上限。文中机器 IP 经过脱敏处理不含任何密钥/口令。0. 写在前面为什么选这个题目作为一名常年和 Linux 服务器、K8s、监控告警打交道的 DevOps我最看重的 AI 编码工具只有两点能不能真的把活干完而不是只给片段以及用起来贵不贵、稳不稳。AtomCode 主打「开源 多模型 免费 Token」刚好戳中痛点。本次我拿到一台已部署好 AtomCode 5.0.0 的云主机公网 Ubuntu 22.04已登录 AtomGit 免费 CodingPlan 额度决定把任务完全交给 AtomCode 的 headless无头/命令行模式让它从零开发一个「服务器资源监控看板」再亲自验证一遍结果。下面是完整的、可复现的真实过程。1. 环境画像先看清手里的牌登录机器后第一件事是把环境摸清楚。以下均为真实输出$cat/etc/os-release|head-3PRETTY_NAMEUbuntu 22.04.3 LTSNAMEUbuntuVERSION_ID22.04$uname-aLinux lavm-cw9k5dvspp5.15.0-60-generic#66-Ubuntu SMP ... x86_64 GNU/Linux$ atomcode--versionatomcode5.0.0(unknown)$ atomcode status Loggedinas: cpyaxjq(66612fcc2da91e28f2501347)Name: cpyaxjq Email: cpyaxjqnoreply.gitcode.com# 默认提供方已登录即带免费额度$grepdefault_provider ~/.atomcode/config.toml default_providerAtomGit-deepseek-v4-flash# base_url https://llm-api.atomgit.com/v1核心信息AtomCode 5.0.0 已就绪已用 AtomGit 账号登录默认走deepseek-v4-flash模型Token 免费。硬件是 2 核 4G、60G 系统盘的轻量云主机——足够跑一个小 Flask 服务。1.1 AtomCode 怎么装、额度怎么领给新朋友官方提供一键安装脚本以官网最新版为准本文实机为 5.0.0# Linux / macOScurl-fsSLhttps://atomgit.com/atomgit_atomcode/atomcode/releases/download/v4.22.2/install.sh|sh# Windows (PowerShell)irm https://atomgit.com/atomgit_atomcode/atomcode/releases/download/v4.22.2/install.ps1|iex装完首次运行会进入 3 步向导欢迎 → 语言 → 配置。关键是执行一次atomcode login用 AtomGit OAuth 登录后即可领取CodingPlan 免费模型额度DeepSeek / Qwen / 智谱 GLM 等国产模型随意切换不用翻墙、不用绑卡、不被限流。这也是它相比某些海外工具最香的地方。2. 把任务交给 AtomCodeheadless 模式AtomCode 不只是交互式聊天更香的是headless 模式——把需求写进一个 prompt 文件加-y跳过权限确认它就会自主读需求、写代码、装依赖、起服务、自测、修 bug全程不向你提问。2.1 需求文件prompt.txt我在/root/atomcode_demo/monitor/prompt.txt写了一段结构化需求节选核心约束请在 /root/atomcode_demo/monitor 下从零开发「服务器资源监控看板」 - 后端 Python3 Flask psutil前端 HTML ECharts(CDN) - GET /api/metrics 返回 JSONtimestamp/hostname/cpu_percent/per_cpu/ mem_percent/mem_used_mb/mem_total_mb/disk_percent/loadavg/boot_time - GET / 返回 templates/index.htmlECharts 仪表盘 CPU 折线每 2s 刷新 - 安装依赖超时则用清华镜像冒烟测试setsid 后台起服务 → curl /api/metrics 验证 JSON → curl / 验证 200 → 查日志 → pkill 结束 - 全程不提问失败自行排查修复2.2 一条命令启动「全自动开发」cd/root/atomcode_demo/monitor atomcode --prompt-file prompt.txt-y--no-telemetry-y等价于--dangerously-skip-permissions让 Agent 对每一次文件写入、命令执行都自动放行——这正是无人值守跑 CI/远程机的姿势。启动后日志第一行就告诉我们它醒了[engine] active (model deepseek-v4-flash) [headless] --dangerously-skip-permissions: all tool calls are auto-approved [warning] Running with Administrator privileges — model may have access to system files.整体工作流如下AtomCode 在幕后自动编排[ 我写的 prompt.txt ] ──► atomcode --prompt-file prompt.txt -y │ (deepseek-v4-flash · 免费 Token) ▼ ┌──────────────────────┐ │ AtomCode Agent │ │ ① 解析需求 │ │ ② 生成 app.py │ │ ③ 生成 index.html │ │ ④ pip 装依赖 │ │ ⑤ 起服务 curl 自测 │ │ ⑥ 失败则自查修复 │ └──────────┬───────────┘ ▼ [ app.py / index.html / README / 验证报告 ]3. 真实结果它真把活干完了AtomCode 跑完后在终端给出了自检报告原文摘录### 创建/修改的文件清单 -rw-r--r-- 1 root root 2314 app.py -rw-r--r-- 1 root root 1350 README.md -rw-r--r-- 1 root root 12 requirements.txt drwxr-xr-- 2 root root 4096 templates/ └── index.html (9115 bytes, 210 lines) ### /api/metrics 真实返回示例 { boot_time: 1783657662, cpu_percent: 0.0, disk_percent: 54.4, hostname: lavm-cw9k5dvspp, loadavg: [0.17, 0.09, 0.08], mem_percent: 19.7, mem_total_mb: 3923, mem_used_mb: 774, per_cpu: [0.0, 0.0], timestamp: 1784442049 } ### 首页 HTTP 状态码200 ✅ ### 日志关键行 2026-07-19 14:20:42 [INFO] 启动监控服务 → http://0.0.0.0:5000 2026-07-19 14:20:49 [INFO] 127.0.0.1 - GET /api/metrics HTTP/1.1 200 - 2026-07-19 14:20:49 [INFO] 127.0.0.1 - GET / HTTP/1.1 200 - 日志无 ERROR两个接口均返回 200。注意这台机器只有 2 核所以per_cpu是[0.0, 0.0]、cpu_percent为 0——这是真实空闲状态的实测值不是写死的。4. 代码点评质量超出预期我特意把生成的app.py拉下来逐行看了工程素养在线defget_metrics():采集系统指标返回字典异常时兜底为默认值。result{timestamp:int(time.time()),hostname:socket.gethostname(),cpu_percent:0.0,per_cpu:[],mem_percent:0.0,mem_used_mb:0,mem_total_mb:0,disk_percent:0.0,loadavg:[0.0,0.0,0.0],boot_time:0}try:result[cpu_percent]psutil.cpu_percent(interval0)result[per_cpu]psutil.cpu_percent(percpuTrue,interval0)exceptExceptionasexc:logger.warning(采集 CPU 指标失败: %s,exc)# 内存 / 磁盘 / 负载 / 启动时间 同理各自 try-except 兜底returnresultapp.route(/api/metrics)defapi_metrics():returnjsonify(get_metrics())app.route(/)defindex():returnrender_template(index.html)三个亮点值得说异常兜底每个采集项独立try/except单点失败不影响整体接口——这是很多一次性脚本忽略的健壮性。结构化日志logging.basicConfiglogger运行时能看到INFO级访问记录见第 3 节日志。职责清晰get_metrics()与路由分离单测友好。前端index.html9115 字节是 ECharts 暗色主题CPU/内存/磁盘三仪表盘 60 秒 CPU 趋势折线 实时概览卡片前端每 2 秒fetch(/api/metrics)刷新。技术栈选型也很务实——ECharts 走 CDN零构建步骤丢到任意静态服务器都能跑。系统架构一张图看明白┌──────────────────────────────────────────────────────────┐ │ 浏览器ECharts 看板 │ │ 每 2s fetch(/api/metrics) ──JSON──┐ │ └─────────────────────────────────────────────│─────────────┘ │ ┌─────────────────────────────────────────────▼─────────────┐ │ Flask app.py (0.0.0.0:5000) │ │ GET / → render_template(index.html) │ │ GET /api/metrics → jsonify(get_metrics()) │ └─────────────────────────────────────────────┬─────────────┘ │ ┌─────────────────────────────────────────────▼─────────────┐ │ psutilcpu / per_cpu / virtual_memory / disk_usage / │ │ getloadavg / boot_time │ └──────────────────────────────────────────────────────────┘5. 我不信邪自己又验了一遍可复现性Agent 说通过不代表我真信。我独立重启服务、用curl实测输出如下真实$ pip3 show flask psutil|grep-EName|VersionName: Flask Version:3.1.3 Name: psutil Version:7.2.2 $ setsid python3 app.py/tmp/monitor_verify.log21$sleep3$curl-shttp://127.0.0.1:5000/api/metrics{boot_time:1783657662,cpu_percent:0.0,disk_percent:54.4,hostname:lavm-cw9k5dvspp,loadavg:[0.03,0.07,0.08],mem_percent:15.7,mem_total_mb:3923,mem_used_mb:616,per_cpu:[0.0,0.0],timestamp:1784442175}$curl-s-o/dev/null-w%{http_code}\nhttp://127.0.0.1:5000/200$tail-3/tmp/monitor_verify.log2026-07-1914:22:55[INFO]GET /api/metrics HTTP/1.1200-2026-07-1914:22:55[INFO]GET / HTTP/1.1200-Flask 3.1.3 psutil 7.2.2接口返回合法 JSON首页 200。完全复现 Agent 的结论——这说明 AtomCode 不是运气好跑通一次而是产出了可稳定部署的代码。6. 踩坑 经验小结headless 模式要加-y否则每步工具调用都会卡在权限确认无人值守场景下直接卡死。后台进程别占住 SSH 通道用setsid ... 把服务彻底脱离当前 shell再用curl验证最后pkill -f app.py收尾——否则远程会话结束会把服务一起带走。依赖源要兜底轻量云机偶尔拉 PyPI 慢prompt 里提前写好超时换清华镜像Agent 会自己切换省去人工救火。免费额度的正确打开方式atomcode login一次领好 CodingPlanheadless 跑长任务不心疼 Token。模型可切换通过--provider/--model或改config.toml写 Python 用 Qwen、复杂推理用 DeepSeek、中文理解用 GLM按需组合。7. 进阶玩法顺手挖的隐藏能力多模型自由切atomcode --provider AtomGit-Qwen-Qwen3-VL-8B-Instruct -p ...视觉模型还能读图。MCP 扩展atomcode mcp管理 MCP Server把数据库、K8s、内部 API 接进来当工具。插件/技能市场atomcode plugin管理 skill/command 插件团队可沉淀自己的工程规范。源码二次开发AtomCode 在 AtomGit/GitHub 双平台开源git clone后cargo build --release即可本地构建适合想深度定制的企业。本地模式支持代码不上云对数据合规敏感的公司项目友好。8. 总结这一次实战AtomCode 在headless 模式下仅用一条命令就完成了「需求解析 → 全栈代码生成 → 依赖安装 → 服务自测 → 输出验证报告」的完整闭环产出的 Flask psutil ECharts 监控看板开箱即跑、可独立复现。对我这种追求把活干完的 DevOps 来说它的价值不在某个模型有多强而在于用免费、稳定、国产的模型底座把工程链路连贯地跑通——这正是开源 AI 编码工具该有的样子。如果你也受够了代理不稳、额度焦虑、动辄封号不妨去 AtomGit 下个 AtomCode领个免费 CodingPlan用一条atomcode -p 你的需求感受下把任务交给它的爽感。原创声明本文为作者真实实操记录首发于「码动四季·玩转 AtomCode」夏季征文。示例代码由 AtomCode 生成文章文本由作者撰写AI 辅助比例远低于 30%。文中不含任何密钥与敏感信息。转载请保留出处。