pingmike2 / instabox-keepalive
git clone https://github.com/pingmike2/instabox-keepalive.git
用 activity lease 让 InstaBox 云机器不被 30 分钟空闲休眠带走:纯 POSIX sh 一条命令安装(systemd/OpenRC/cron 自动适配),另附 Cloudflare Worker 版
—
stars, 24h
+26
stars, 7 days · #1,478
+26
stars, 30 days · #9,716
26
★ total · +26% this week
14
forks · 0 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageShell
LicenseMIT
Created2026-10-16 (4d ago)
Last push2d ago
Watchers0
OwnerUser
Links
README excerpt
# instabox-keepalive
InstaBox 的机器空闲 30 分钟就会自动休眠(`auto-suspend`)。本仓库用官方的 **activity lease** 定期续租,让它一直醒着;不需要在机器里装任何东西。
> **为什么不能直接把休眠关掉**(`autoSuspendAfterSeconds=0`)?2026-10-18 实测:普通/邀请制账号的 `/v1/me` 里有 `"fixedAutoSuspendSeconds": 1800`、`"manualLifecycle": false`,服务端把空闲挂起阈值**锁死在账号级**,因此对 `PATCH /v1/machines/{id}` 传 `autoSuspendAfterSeconds: 0`(或任何值,含官方 `instabox auto-suspend 0` 与 SDK `setAutoSuspend`)**一律被静默忽略**:返回 200,值仍是 1800。详见文末《为什么关不掉休眠》。所以只能用租约这条官方口子。
> 为什么不在机器里面跑保活:机器一 suspend,里面的 cron/systemd 定时器全都冻住,谁也叫不醒自己。续租必须来自**外部**,靠那次请求真的出网。
[code]
就一个文件 `keepalive.sh`:不带参数=安装/更新,`uninstall`=卸载,`--once` / `--watch` / `--status` / `--release`=手动用。`sh keepalive.sh --help` 看全部参数。
装完会立刻做一次续租自检,失败就不装。服务形式按系统自动挑:**systemd → OpenRC → cron**。
## 关于 `disable-sleep-mechanism.sh`(可能无效,慎用)
仓库里也留了一个一次性脚本 `disable-sleep-mechanism.sh`,思路是直接把每台机器的 `autoSuspendAfterSeconds` 改成 0。**在多数账号上它不会生效**:只要 `/v1/me` 里的 `fixedAutoSuspendSeconds` 不是 0(免费/邀请制账号常见 1800),服务端就会把对机器字段的修改**静默丢弃**,返回 200 但值不变 —— 连官方 `instabox auto-suspend 0` 也一样无效。
脚本自己会判断,不会假报成功:
[code] sh
cd worker
npx wrangler secret put INSTABOX_API_KEY # key 只进 secret,不写进 wrangler.toml
npx wrangler deploy
[code]
https:// .workers.dev/?token=xxx 续租一次,看结果
https:// .workers.dev/status?token=xxx 机器状态
https:// .workers.dev/log?token=xxx 最近 48 条保活日志
https:// .workers.dev/log?token=xxx&format=text 纯文本,方便 grep
https:// .workers.dev/release?token=xxx 放掉租约
[code] sh
# 1) 账号级锁:空闲阈值被服务端钉死,且用户改不了
curl -s https://api.instabox.sh/v1/me -H "X-API-Key: $KEY"
# → "fixedAutoSuspendSeconds": 1800, "manualLifecycle": false
curl -s -X PATCH https://api.instabox.sh/v1/me -H "X-API-Key: $KEY" -d '{}' -H 'Content-Type: application/json'
# → 404 route not found(/v1/me 只有 GET)
# 2) 改机器字段被静默忽略:200,但值不变
curl -s -X PATCH https://api.instabox.sh/v1/machines/$MID -H "X-API-Key: $KEY" \
-H "Idempotency-Key: $(uuidgen)" -H 'Content-Type: application/json' \
-d '{"autoSuspendAfterSeconds":0}'
# → 200,回包里 autoSuspendAfterSeconds 仍是 1800;等 60s 后 GET 也还是 1800,revision 不动
# 3) 官方 CLI 走的是同一个字段,同样无效(抓包实证)
instabox -server auto-suspend 0
# → PATCH /v1/machines/ {"metadata":null,"autoSuspendAfterSeconds":0}
```
对照实验排除了“字段名写错 / key 权限不够 / 端点坏了”:同一个 PATCH 端点里改 `metadata` **立刻生效**。
结论:`fixedAutoSuspendSeconds` 是平台侧的账号策略(免费/邀请制账号的防滥用),只有账号本身被改成 `manualLifecycle: true`(或平台侧去掉固定值)才可能真正关掉 —— 这在用户侧没有任何 API 入口。所以本仓库用**租约续租**:它不去改那个字段,而是持续给机器“活动”信号,让 30 分钟空闲永远攒不满。
## 免责声明
仅用于管理你自己账号下的 InstaBox 机器。请自行确认这把 key 的权限范围与所在机器的可信程度——保活进程能读取它,能读到这把 key 的人也能操作你的机器。使用本脚本产生的一切后果由使用者自行承担。
MIT © 2026 pingmike2