11-26 10552人
解决 青龙面板中存放的cookie数目过多(如超过45)时,会报 Argument list too long 而无法正常执行部分脚本的问题
问题排查
task_before.sh
在shell环境中设置了一个很大的环境变量,其大小大概为 总ck数目 未被屏蔽的ck数目 单个互助码的大小。
部分活动的互助码大小约为40,此时如果有80个ck,且全部启用,则大小将是 80 80 40 = 256000。
而系统默认的参数列表大小(包含环境变量)为 $(getconf ARG_MAX) = 131072,可见远远超出该值。因此后续调用任何系统命令,都将会报出 Argument list too long 而导致后续流程无法正常进行。
现有解决方案
昨晚搜了下现有的做法,基本都是分多个青龙容器,每个保持在45个(这样大小约为81000),确保不会报错。
这个方法很简洁,但是会带来维护上的麻烦,本来只要部署一套qinglong容器,现在需要维护多套,比较费心力。
新的解决思路
现在的问题是shell中设置的env太大了,导致其他流程不能正常执行。那么如果我把设置env的流程挪到nodejs中,不再经由shell的环境,那么shell中执行的其他命令就不会报错了。
有了思路后,问题就简单了。这下只需要把原先task_before.js中执行的解析互助码文件和转换后放入shell环境变量的流程换到nodejs中即可,这样这几十MB的环境变量就不再是作为参数传入了。
最终方案
复制下方 code.sh、task_before.sh 到/ql/config目录
复制下方 jdCookie.js 到 /ql/deps 目录,确保更新脚本库后,魔改版本会被覆盖过去
注意把映射目录增加 ./data/deps:/ql/deps
测试
Windows 10 x64 Google Chrome 103.0.5060.114按时打发点
Windows 10 x64 Google Chrome 103.0.0.0哼哼唧唧家
iPhone iOS 14.8.1 MQQBrowser 11.5.7测试
Android 10 Android Webkit牛的牛的
Windows 10 x64 Google Chrome 86.0.4240.198顶呱呱呱
Android 11 Android Webkit 4.0试试
Windows 10 x64 Google Chrome 86.0.4240.198牛的
iPhone iOS 14.4 WeChat 8.0牛的
Windows 10 x64 Google Chrome 77.0.3865.120顶顶顶顶顶
Windows 10 x64 Google Chrome 95.0.4638.69