google idx工作区保活

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

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

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

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

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

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

下面分项说明一下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
id1

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

ID3:延迟30000毫秒

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

ID5:设置同ID2

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

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

ID8:设置同ID2

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

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

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

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

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

ID14:退出流程

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

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

THE END