11-26 10822人
解决 青龙面板中存放的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 55.0.2883.87看看
Android 11 Google Chrome 85.0看看瞧瞧
Windows 10 x64 Google Chrome 96.0.4664.55看看瞧瞧
Windows 10 x64 Google Chrome 96.0.4664.55看看瞧瞧
Mac OS X 10.15.7 Google Chrome 96.0.4664.55了看就看建行卡
Windows 10 x64 Google Chrome 96.0.4664.55阿萨德
Windows 10 x64 Google Chrome 70.0.3538.25