解决 青龙面板中存放的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

此处内容已隐藏,评论 后刷新即可查看

欢迎留言

38 条评论