idx工作区保活教程存档

声明:抛板砖引玉,觉得我这是滥用不用喷我,直接关闭这个标签页即可。

前置条件:
硬件:一台24小时在线的运行着Windows的电脑
软件:zTasker和cloudflared

正文:
保活只对应Android studio cloud的工作区,因为这个使用noVNC,网页一直开着就可以活,而且这个配置非常的高,8C16T,60G内存。这个保活保的是24小时以后Google会准时archive你的工作区,即使你开着网页也没用,所以需要这个保活去unarchive你的工作区,不是使用noVNC的工作区,这个方法不适合。

首先,在你的工作区的ubuntu里,即使被archive了,/home下的东西是不会被删除的。所以这里我假设你所需要的东西,都已经放到了/home/的一个文件夹里,包括前面所需要的cloudflared隧道的二进制文件。并且,我假设你已经设置好了开机启动你想运行的程序(包括cloudflared隧道)。

然后,在你进行保活的Windows电脑上运行zTasker,新建一个复合任务,具体设置如下图。

这个复合任务的计划设定里设置3分钟执行一次

下面分项说明一下14个项目的设置和原理:
ID1:子任务-任务类型-程序-运行cmd命令,检测你cloudflared隧道的在线状态,并把检测出来的http代码写入变量,变量名称argocheck

curl -I -s "http://你的argo地址" | findstr /R "^HTTP\/" | findstr /R "[0-9][0-9][0-9]"

如果隧道在线,那么结果中会得到输出的字串 HTTP/1.1 404 Not Found

ID2:条件判断-变量判断,判断变量中是否包含为404 的字符串,如果包含,那么条件成立不需要保活,退出流程,如果不包含,那么条件不成立,继续流程

ID3:延迟30000毫秒

ID4:变量操作-变量运算,如图设置,将结果写入变量f1,f1代表fail 1,表示隧道在线检测失败了1次

ID5:设置同ID2

ID6:设置同ID3,延迟30000毫秒

ID7:变量操作-变量运算,如图设置,将结果写入变量f2,f2代表fail 2,表示隧道在线检测失败了2次

ID8:设置同ID2

ID9:设置同ID3,延迟30000毫秒

ID10:变量操作-变量运算,如图设置,将结果写入变量f3,f3代表fail 3,表示隧道在线检测失败了3次

ID11:条件判断-变量判断,如图设置,如果条件成立,f3的数值等于3,代表检测了3次隧道都不通

ID12:子任务-任务类型-程序-结束进程,杀掉chrome.exe,你可以使用其它浏览器保活,我用的是chrome,所以杀掉的是chrome.exe

ID13:子任务-任务类型-网络-打开网页,打开你的工作区的地址,你可以登录 https://idx.google.com/ 就可以看到你的工作区名字,右击复制地址,添加到里面即可。

ID14:退出流程

总结:通过检测cloudflared隧道是否在线来判断是否启动保活,检测到隧道在线的404的http代码,那么就认为不需要保活退出任务流程,如果没检测到404代码,在变量记录失败1次,并且30秒后再次检查,这是为了避免网络波动引起的检测失败,重复检测到第三次,变量f3里确认已经失败了3次,那么就启动保活流程,杀掉用来保活的chrome,然后重新打开工作区地址,这里注意我的chrome设置了启动以后是新建标签页,不要设置成弹出窗口提示是否恢复上次未正常关闭的页面。打开地址以后,你的工作区就开始unarchive,这个看idx的资源分配情况,有快有慢,还有可能分配失败,这也是为什么脚本设置成了3分钟运行一次,因为即使分配得再慢,甚至分配失败,3分钟也足够了,如果隧道还没上线,保活会再次启动,走一遍流程再去打开工作区页面,直到成功unarchive了工作区,因为前面你设置了开机就启动你的程序和cloudflared通道,那么脚本检测就会成功,不会再启动保活流程了。

PS:你可以对里面的流程进行自己的修改,比如你觉得隧道检测间隔30秒,还三次检测失败才启动保活太久了,你可以改成失败一次就启动。或者你最后启动了你的工作区地址以后你不想看到chrome,你可以加个任务最小化启动chrome,眼不见心不烦。
总之,自由发挥吧。


1. 下载并放置 cloudflared 二进制

cd /home
wget -O cloudflared \
  https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
chmod +x cloudflared

这时你的隧道客户端就是 /home/cloudflared。


2. 准备凭证目录与登录授权

mkdir -p /home/.cloudflared
cd /home
./cloudflared tunnel login
  • 上面会在命令行打印一个 URL,复制到本地浏览器登录 Cloudflare 授权。
  • 授权成功后,会在 /home/.cloudflared/cert.pem 生成凭证。

3. 创建隧道并配置 DNS

cd /home
./cloudflared tunnel create idx-tunnel
# 假设它返回了 UUID: 1234-abcd-...
# 然后给它做 DNS 路由(把你的子域名指向这个隧道)
./cloudflared tunnel route dns idx-tunnel idx.example.com

会在 /home/.cloudflared/1234-abcd-…json 生成隧道凭证文件。

下面接着往下走,完成 DNS 路由配置config.yml 撰写以及隧道启动验证。


1. 将凭证文件搬到

/home/.cloudflared

你之前执行登录和创建隧道时,凭证都在 /root/.cloudflared。为了把所有文件都放在 /home,先把它们复制过去:

mkdir -p /home/.cloudflared
cp /root/.cloudflared/cert.pem /home/.cloudflared/
cp /root/.cloudflared/932b8552-7973-4e42-8759-f82dcbd58525.json /home/.cloudflared/
  • cert.pem 是 Argo Tunnel 的账户凭证,用于后续通过 API 配置 DNS。
  • 932b8552-7973-4e42-8759-f82dcbd58525.json 是隧道自身的凭证,用于隧道启动。

现在 /home/.cloudflared 下有这两个文件,符合“只用 /home 目录”的要求。


2. 配置 DNS 路由

把你的子域名(例如 idx.example.com)指向刚才创建的隧道:

cd /home
./cloudflared tunnel route dns idx-tunnel idx.example.com

3. 撰写

/home/config.yml

在 /home 下新建 config.yml,内容参考下面的模板,记得把域名和隧道 UUID 替换成你的实际值:

# /home/config.yml

tunnel: 932b8552-7973-4e42-8759-f82dcbd58525
credentials-file: /home/.cloudflared/932b8552-7973-4e42-8759-f82dcbd58525.json


ingress:
  - hostname: idx.127.pp.ua
    service: http_status:404

  - service: http_status:404
  • tunnel:你在创建隧道时得到的 UUID。
  • credentials-file :指向隧道凭证的绝对路径。
  • ingress:定义了通过隧道进来的流量该怎么转发。
    • 我们把请求都丢给本地 localhost:8080,即使没有运行服务也会返回 404,用于心跳检测。

4. 手动启动隧道验证

在 /home 下,用下面命令启动隧道并加载配置文件,观察日志输出:

cd /home
./cloudflared tunnel run idx-tunnel --config /home/config.yml
  • 如果看到日志里有 INFO Connection established 之类字样,说明隧道连通成功。
  • 打开浏览器访问 https://idx.example.com,应该能看到 404(或你在 8080 端口运行的占位页面)。

按 Ctrl+C 退出之后,就可以验证基本功能没问题了。


下面是 最简单、一步步把 cloudflared.service 放到 /home,然后用 systemctl link 注册并启动的完整流程。

前提:你已经在 /home 下有可用的 cloudflared 可执行文件和 /home/config.yml,且能手动运行成功。


1. 在 /home 下创建 cloudflared.service

  1. 切到 /home 目录:
cd /home
  1. 用 sudo tee 创建服务文件 /home/cloudflared.service,输入内容:
sudo tee /home/cloudflared.service << 'EOF'
[Unit]
Description=Cloudflare Tunnel for idx-tunnel
After=network-online.target

[Service]
Type=simple
ExecStart=/home/cloudflared --config /home/config.yml tunnel run idx-tunnel
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
    • ExecStart 一行中一定要写你完整的命令和路径。
  • 确保 /home/cloudflared、/home/config.yml 路径正确。
  1. 查看文件确认无误:
sudo cat /home/cloudflared.service

2. 用

systemctl link

注册此 unit

把刚放在 /home 的 unit 文件链接到 systemd 的搜索路径:

sudo systemctl link /home/cloudflared.service
  • 这一步会在 /etc/systemd/system/ 下创建一个符号链接指向 /home/cloudflared.service。
  • 如果提示成功,没有错误即可。

3. 开机自启并启动服务

  1. 启用服务(开机自启动):
sudo systemctl enable cloudflared.service
  1. 启动服务(立即启动):
sudo systemctl start cloudflared.service

4. 验证服务状态

  1. 查看服务是否运行成功:
sudo systemctl status cloudflared.service -l
  1. 期望看到:
Active: active (running)
  1. 如果状态正常,按 q 退出查看。
  2. 实时查看日志,确认隧道连接和心跳响应:
sudo journalctl -u cloudflared.service -f
  1. 日志里应包含:
INFO Connection established
...

5. 测试隧道可达

在本地终端运行:

curl -I https://idx.127.pp.ua
  • 应马上返回:
HTTP/1.1 404 Not Found
  • (说明 static 404 生效,隧道在线)