11-26 11044人
解决 青龙面板中存放的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 86.0.4240.198顶顶顶顶顶
Windows 10 x64 Google Chrome 96.0.4664.110红红火火恍恍惚惚
Windows 10 x64 Firefox 96.0测试
Windows 10 x64 Google Chrome 97.0.4692.71看看
Windows 10 x64 Edge 18.1836看看
iPhone iOS 13.3 Mozilla Compatible拒绝了
Android 11 Android Webkit 4.正好看看
Mac OS X 10.15.7 Google Chrome 96.0.4664.110正需要,谢谢分享.
Windows 7 x64 Google Chrome 86.0.4240.198看看
Windows 7 x64 Google Chrome 94.0.4606.54