我如何使用 100 行 Flask 从云服务器控制我的 Android 手机

发布: (2026年4月24日 GMT+8 16:29)
4 分钟阅读
原文: Dev.to

Source: Dev.to

问题

大多数跨设备自动化都迫使你在以下两者之间做选择:

  • 太简单: 硬编码的 cron 任务,缺乏协同
  • 太复杂: Redis、RabbitMQ、Firebase —— 为一个简单的通知构建完整基础设施

我只想让我的云脚本说一句 “嘿,震动我的手机”。仅此而已。

工作原理

Intent Bus 是一个基于 SQLite 的小型 Flask 应用。它只有一个职责:让脚本发布任务,让工作者认领并执行这些任务。

步骤 1 — 云脚本发布意图

curl -X POST https://your-bus.pythonanywhere.com/intent \
  -H "Content-Type: application/json" \
  -H "X-API-Key: your_key_here" \
  -d '{"goal":"send_notification","payload":{"message":"Scrape complete"}}'

步骤 2 — Termux 工作者认领任务

在手机上运行的 Bash 脚本每 10 秒轮询一次总线。当它发现任务时,会使用原子锁认领任务,执行后标记为已完成。

步骤 3 — 手机震动

termux-notification --title "System Update" --content "$MESSAGE"

这就是完整的流程。

可靠性的关键

  1. 原子锁定 – SQLite 的 UPDATE 加行计数检查,确保即使有多个工作者同时运行,也只有一个工作者能够认领同一任务。
  2. 可见性超时 – 如果工作者在任务执行中崩溃,锁会在 60 秒后失效,任务会自动返回队列。
  3. 主题路由 – 工作者只会认领与其 goal 匹配的任务(通过 ?goal=)。通知工作者永远不会误拿日志任务。

架构图

Cloud Scraper (PythonAnywhere)
        |
        | POST /intent

Intent Bus (Flask + SQLite)
        |
        | claim + fulfill

Termux Worker (Android Phone)
        |
        | termux-notification

📱 Phone Notification

能做什么

因为总线仅是 HTTP,任何地方的脚本都可以发布或认领任务:

  • 爬虫完成 → 通知手机
  • 网站宕机 → 警报发送到 Discord
  • GitHub 推送 → 触发防火墙后面的家用 Raspberry Pi 部署
  • 旧 Android 手机 → 通过 termux-sms-send 替代 Twilio

安全性

在公开此项目后,大家立刻对开放的端点进行压力测试。我加入了 API‑key 认证——密钥存放在 PythonAnywhere 的 WSGI 环境变量中,永不写入仓库。工作者从本地 .apikey 文件读取密钥。

试一试

完整代码、规范和示例均在 GitHub 上:

https://github.com/dsecurity49/Intent-Bus

它可以免费运行在 PythonAnywhere + 任意装有 Termux 的 Android 手机上。无需 Docker,也没有除 Flask 之外的依赖。

如果你为它编写了工作者脚本,欢迎提交 PR。

0 浏览
Back to Blog

相关文章

阅读更多 »