This commit is contained in:
anonymous 2021-04-07 17:36:17 +08:00
parent e27bbe4edd
commit c8f40a6faa
15 changed files with 484 additions and 1179 deletions

View File

@ -1,7 +1,7 @@
FROM node:lts-alpine as build
LABEL maintainer="whyour"
ARG QL_BASE_URL=https://github.com.cnpmjs.org/whyour/qinglong
ARG QL_BASE_BRANCH=master
ARG QL_URL=https://github.com.cnpmjs.org/whyour/qinglong
ARG QL_BRANCH=master
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
LANG=zh_CN.UTF-8 \
SHELL=/bin/bash \
@ -16,15 +16,14 @@ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
python \
make \
g++ \
yarn \
&& git clone -b ${QL_BASE_BRANCH} ${QL_BASE_URL} ${QL_DIR} \
&& git clone -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \
&& cd ${QL_DIR} \
&& cp -f .env.example .env \
&& yarn --network-timeout 100000
FROM node:lts-alpine
LABEL maintainer="whyour"
ARG QL_BASE_URL=https://github.com.cnpmjs.org/whyour/qinglong
ARG QL_BASE_BRANCH=master
ARG QL_URL=https://github.com.cnpmjs.org/whyour/qinglong
ARG QL_BRANCH=master
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
LANG=zh_CN.UTF-8 \
SHELL=/bin/bash \
@ -48,20 +47,18 @@ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
python \
make \
g++ \
yarn \
&& rm -rf /var/cache/apk/* \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& touch ~/.bashrc \
&& mkdir /run/nginx \
&& git clone -b ${QL_BASE_BRANCH} ${QL_BASE_URL} ${QL_DIR} \
&& git clone -b ${QL_BRANCH} ${QL_URL} ${QL_DIR} \
&& cd ${QL_DIR} \
&& cp -f .env.example .env \
&& ln -sf ${QL_DIR}/shell/js.sh /usr/local/bin/js \
&& ln -sf ${QL_DIR}/shell/git_pull.sh /usr/local/bin/git_pull \
&& ln -sf ${QL_DIR}/shell/rm_log.sh /usr/local/bin/rm_log \
&& ln -sf ${QL_DIR}/shell/export_sharecodes.sh /usr/local/bin/export_sharecodes \
&& ln -sf ${QL_DIR}/shell/git_diy.sh /usr/local/bin/diy \
&& ln -sf ${QL_DIR}/shell/task.sh /usr/local/bin/task \
&& ln -sf ${QL_DIR}/shell/task.sh /usr/local/bin/mytask \
&& ln -sf ${QL_DIR}/shell/update.sh /usr/local/bin/update \
&& ln -sf ${QL_DIR}/shell/rmlog.sh /usr/local/bin/rmlog \
&& ln -sf ${QL_DIR}/shell/notify.sh /usr/local/bin/notify \
&& ln -sf ${QL_DIR}/shell/rebuild.sh /usr/local/bin/rebuild \
&& ln -sf ${QL_DIR}/docker/docker-entrypoint.sh /usr/local/bin/entrypoint \

88
sample/config.sample.sh Normal file
View File

@ -0,0 +1,88 @@
## Version: v2.0.0
## Date: 2021-04-07
## Update Content: 新一版qinglong。
## 上面版本号中如果第2位数字有变化那么代表增加了新的参数如果只有第3位数字有变化仅代表更新了注释没有增加新的参数可更新可不更新
## 临时屏蔽某个Cookie
## 多个Cookie编号以半角的空格分隔两侧一对半角双引号使用此功能后在运行js脚本时账户编号将发生变化
## 举例1TempBlockCookie="2" 临时屏蔽掉Cookie2
## 举例2TempBlockCookie="2 4" 临时屏蔽掉Cookie2和Cookie4
TempBlockCookie=""
## 如果只是想要屏蔽某个账号不跑某一些脚本,可以参考下面 case 这个命令的例子来控制case的条件中请输入脚本的绝对路径也就是在crontab.list中的脚本路径是什么这里就填入什么
## case $1 in
## /ql/scripts/lxk0301_jd_scripts/jd_fruit.js)
## TempBlockCookie="5" # 账号5不玩lxk0301_jd_scripts下的jd_fruit.js
## ;;
## /ql/scripts/lxk0301_jd_scripts/jd_dreamFactory.js | /ql/scripts/whyour_hundun/quanx/didi.js)
## TempBlockCookie="2" # 账号2不玩lxk0301_jd_scripts下的jd_dreamFactory.js和whyour_hundun下子文件夹quanx中的didi.js
## ;;
## /ql/scripts/lxk0301_jd_scripts/jd_jdzz.js | /ql/scripts/whyour_hundun/quanx/jx_factory.js)
## TempBlockCookie="3 6" # 账号3、账号6不玩lxk0301_jd_scripts下的jd_jdzz.js和whyour_hundun下子文件夹quanx中的jx_factory.js
## ;;
## esac
## 在运行 update 命令时,是否自动删除失效的脚本与定时任务
AutoDelCron="true"
## 在运行 update 命令时,是否自动增加新的本地定时任务
AutoAddCron="true"
## 运行 rmlog 命令时删除多久以前的日志,仅能输入正整数
RmLogDaysAgo="7"
## 在运行 task 或 mytask 命令时,随机延迟启动任务的最大延迟时间
## 如果任务不是必须准点运行的任务,那么给它增加一个随机延迟,由你定义最大延迟时间,单位为秒,如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行
## 在crontab.list中在每小时第0-2分、第30-31分、第59分这几个时间内启动的任务均算作必须准点运行的任务在启动这些任务时即使你定义了RandomDelay也将准点运行不启用随机延迟
## 在crontab.list中除掉每小时上述时间启动的任务外其他任务在你定义了 RandomDelay 的情况下,一律启用随机延迟,但如果你给某些任务添加了 "now" 或者 "conc",那么这些任务也将无视随机延迟直接启动
RandomDelay="300"
## 如果你自己会写shell脚本并且希望在每次运行 update 命令时,额外运行你的 shell 脚本,请赋值为 "true"
## 同时,请务必将你的脚本命名为 extra.sh (只能叫这个文件名),放在 config 目录下
EnableExtraShell=""
## 启用其他开发者的仓库方式一(选填):完整更新整个仓库,针对同一个仓库,方式一和方式二只能选择一种
## OwnRepoUrl仓库地址清单必须从1开始依次编号
## OwnRepoBranch你想使用的分支清单不指定分支即使用默认分支时可以用一对不包含内容的空引号"",编号必须和 OwnRepoUrl 对应。
## OwnRepoPath要使用的脚本在仓库哪个路径下请输入仓库下的相对路径默认空值""代表仓库根目录,编号必须和 OwnRepoUrl 对应同一个仓库下不同文件夹之间使用空格分开。如果既包括根目录又包括子目录填写请见示例中OwnRepoPath3。
## 所有脚本存放在 own 目录下,三个清单必须一一对应,示例如下:
## OwnRepoUrl1="https://gitee.com/abc/jdtsa.git"
## OwnRepoUrl2="https://github.com/nedcd/jxddfsa.git"
## OwnRepoUrl3="git@github.com:eject/poex.git"
##
## OwnRepoBranch1="" # 代表第1个仓库 https://gitee.com/abc/jdtsa.git 使用 "默认" 分支
## OwnRepoBranch2="main" # 代表第2个仓库 https://github.com/nedcd/jxddfsa.git 使用 "main" 分支
## OwnRepoBranch3="master" # 代表第3个仓库 git@github.com:eject/poex.git 使用 "master" 分支
##
## OwnRepoPath1="" # 代表第1个仓库https://gitee.com/abc/jdtsa.git你想使用的脚本就在仓库根目录下。
## OwnRepoPath2="scripts/jd normal" # 代表第2个仓库https://github.com/nedcd/jxddfsa.git你想使用的脚本在仓库的 scripts/jd 和 normal文件夹下必须输入相对路径
## OwnRepoPath3="'' cron" # 代表第3个仓库git@github.com:eject/poex.git你想使用的脚本在仓库的 根目录 和 cron 文件夹下,必须输入相对路径
OwnRepoUrl1=""
OwnRepoUrl2=""
OwnRepoBranch1=""
OwnRepoBranch2=""
OwnRepoPath1=""
OwnRepoPath2=""
## 启用其他开发者的仓库方式二(选填):只下载想要的文件,针对同一个仓库,方式一和方式二只能选择一种。
## 请先确认你能正常下载该raw文件才列在下方无论是github还是gitee请只填入 raw 文件链接。
## 一行一个文件下载链接,首尾一对半角括号,示例:
## OwnRawFile=(
## https://gitee.com/wabdwdd/scipts/raw/master/jd_abc.js
## https://github.com/lonfeg/loon/raw/main/jd_dudi.js
## https://github.com/sunsem/qx/raw/main/z_dida.js
## )
OwnRawFile=(
)

View File

@ -1,599 +0,0 @@
## Version: v3.30.6
## Date: 2021-3-8
## Update Content: 京小兑控制变量,宠汪汪自己内部账户互助变量,环球挑战赛互助变量。
## 上面版本号中如果第2位数字有变化那么代表增加了新的参数如果只有第3位数字有变化仅代表更新了注释没有增加新的参数可更新可不更新
################################## 说明 ##################################
## 以下配置中,带有 export 申明的均由LXK9301大佬定义详见https://gitee.com/lxk0301/jd_scripts/blob/master/githubAction.md
## 其他互助码考虑到直接按LXK9301大佬定义的变量去填的话一是不方便记忆二是容易搞混所以最终的变量将由脚本去组合你只要按注释去填即可
## 除此之外还额外增加了是否自动删除失效任务AutoDelCron、是否自动增加新任务AutoAddCron、删除旧日志时间RmLogDaysAgo、随机延迟启动任务RandomDelay、是否添加自定义脚本EnableExtraShell五个人性化的设置供选择
## 所有赋值等号两边不能有空格,所有的值请一律在两侧添加半角的双引号,如果变量值中含有双引号,则外侧改为一对半角的单引号。
## 所有的赋值都可以参考 “定义东东萌宠是否静默运行” 部分,在不同时间设置不同的值,以达到你想要的效果,具体判断条件如下:
## $(date "+%d") 当前的日期13
## $(date "+%w") 当前是星期几3
## $(date "+%H") 当前的小时数23
## $(date "+%M") 当前的分钟数49
## 其他date命令的更多用法可以在命令行中输入 date --help 查看
## 判断条件 -eq -ne -gt -ge -lt -le ,具体含义可百度一下
################################## 临时屏蔽某个Cookie选填 ##################################
## 如果某些Cookie已经失效了但暂时还没法更新可以使用此功能在不删除该Cookie和重新修改Cookie编号的前提下临时屏蔽掉某些编号的Cookie
## 多个Cookie编号以半角的空格分隔两侧一对半角双引号使用此功能后在运行js脚本时账户编号将发生变化
## 举例1TempBlockCookie="2" 临时屏蔽掉Cookie2
## 举例2TempBlockCookie="2 4" 临时屏蔽掉Cookie2和Cookie4
## 如果只是想要屏蔽某个账号不玩某些小游戏,可以参考下面 case 这个命令的例子来控制,脚本名称请去掉后缀 “.js”
## case $1 in
## jd_fruit)
## TempBlockCookie="5" # 账号5不玩东东农场
## ;;
## jd_dreamFactory | jd_jdfactory)
## TempBlockCookie="2" # 账号2不玩京喜工厂和东东工厂
## ;;
## jd_jdzz | jd_joy)
## TempBlockCookie="3 6" # 账号3、账号6不玩京东赚赚和宠汪汪
## ;;
## esac
TempBlockCookie=""
################################## 定义是否自动删除失效的脚本与定时任务(选填) ##################################
## 有的时候某些JS脚本只在特定的时间有效过了时间就失效了需要自动删除失效的本地定时任务则设置为 "true" ,否则请设置为 "false"
## 检测文件LXK9301/jd_scripts 仓库中的 docker/crontab_list.sh和 shylocks/Loon 仓库中的 docker/crontab_list.sh
## 当设置为 "true" 时会自动从检测文件中读取比对删除的任务识别以“jd_”、“jr_”、“jx_”开头的任务
## 当设置为 "true" 时脚本只会删除一整行失效的定时任务不会修改其他现有任务所以任何时候你都可以自己调整你的crontab.list
## 当设置为 "true" 时如果你有添加额外脚本是以“jd_”“jr_”“jx_”开头的如检测文件中会被删除不是以“jd_”“jr_”“jx_”开头的任务则不受影响
AutoDelCron="true"
################################## 定义是否自动增加新的本地定时任务(选填) ##################################
## LXK9301 大佬会在有需要的时候,增加定时任务,如需要本地自动增加新的定时任务,则设置为 "true" ,否则请设置为 "false"
## 检测文件LXK9301/jd_scripts 仓库中的 docker/crontab_list.sh和 shylocks/Loon 仓库中的 docker/crontab_list.sh
## 当设置为 "true" 时如果检测到检测文件中有增加新的定时任务那么在本地也增加识别以“jd_”、“jr_”、“jx_”开头的任务
## 当设置为 "true" 时,会自动从检测文件新增加的任务中读取时间,该时间为北京时间
## 当设置为 "true" 时脚本只会增加新的定时任务不会修改其他现有任务所以任何时候你都可以自己调整你的crontab.list
AutoAddCron="true"
################################## 定义删除日志的时间(选填) ##################################
## 定义在运行删除旧的日志任务时,要删除多少天以前的日志,请输入正整数,不填则禁用删除日志的功能
RmLogDaysAgo="7"
################################## 定义随机延迟启动任务(选填) ##################################
## 如果任务不是必须准点运行的任务,那么给它增加一个随机延迟,由你定义最大延迟时间,单位为秒,如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行
## 在crontab.list中在每小时第0-2分、第30-31分、第59分这几个时间内启动的任务均算作必须准点运行的任务在启动这些任务时即使你定义了RandomDelay也将准点运行不启用随机延迟
## 在crontab.list中除掉每小时上述时间启动的任务外其他任务在你定义了 RandomDelay 的情况下一律启用随机延迟但如果你按照Wiki教程给某些任务添加了 "now",那么这些任务也将无视随机延迟直接启动
RandomDelay="300"
################################## 定义User-Agent选填 ##################################
## 自定义LXK9301大佬仓库里京东系列js脚本的User-Agent不懂不知不会User-Agent的请不要随意填写内容随意填写了出错概不负责
## 如需使用,请自行解除下一行注释
# export JD_USER_AGENT=""
################################## 定义通知TOKEN选填 ##################################
## 想通过什么渠道收取通知,就填入对应渠道的值
## 1. ServerChan教程http://sc.ftqq.com/3.version
export PUSH_KEY=""
## 2. BARK教程看BARK_PUSH和BARK_SOUND的说明https://gitee.com/lxk0301/jd_scripts/blob/master/githubAction.md
export BARK_PUSH=""
export BARK_SOUND=""
## 3. Telegram如需使用TG_BOT_TOKEN和TG_USER_ID必须同时赋值教程https://gitee.com/lxk0301/jd_scripts/blob/master/backUp/TG_PUSH.md
export TG_BOT_TOKEN=""
export TG_USER_ID=""
## 4. 钉钉教程看DD_BOT_TOKEN和DD_BOT_SECRET部分https://gitee.com/lxk0301/jd_scripts/blob/master/githubAction.md
export DD_BOT_TOKEN=""
export DD_BOT_SECRET=""
## 5. iGot聚合推送支持多方式推送填写iGot的推送key。教程https://gitee.com/lxk0301/jd_scripts/blob/master/githubAction.md
export IGOT_PUSH_KEY=""
## 6. Push Plus微信扫码登录后一对一推送或一对多推送参考文档http://pushplus.hxtrip.com/
## 其中PUSH_PLUS_USER是一对多推送的“群组编码”一对多推送下面->您的群组(如无则新建)->群组编码)注:(1、需订阅者扫描二维码 2、如果您是创建群组所属人也需点击“查看二维码”扫描绑定否则不能接受群组消息推送)只填PUSH_PLUS_TOKEN默认为一对一推送
export PUSH_PLUS_TOKEN=""
export PUSH_PLUS_USER=""
## 7. 企业微信机器人消息推送 webhook 后面的 key文档https://work.weixin.qq.com/api/doc/90000/90136/91770
export QYWX_KEY=""
## 8. 企业微信应用消息推送的值教程https://note.youdao.com/ynoteshare1/index.html?id=351e08a72378206f9dd64d2281e9b83b&type=note
## 依次填上corpid的值,corpsecret的值,touser的值,agentid,media_id的值注意用,号隔开,例如:"wwcff56746d9adwers,B-791548lnzXBE6_BWfxdf3kSTMJr9vFEPKAbh6WERQ,mingcheng,1000001,2COXgjH2UIfERF2zxrtUOKgQ9XklUqMdGSWLBoW_lSDAdafat"
export QYWX_AM=""
################################## 定义每日签到的通知形式(选填) ##################################
## js脚本每日签到提供3种通知方式分别为
## 关闭通知那么请在下方填入0
## 简洁通知那么请在下方填入1其效果见https://github.com/LXK9301/jd_scripts/blob/master/icon/bean_sign_simple.jpg
## 原始通知那么请在下方填入2如果不填也默认为2内容比较长这也是默认通知方式
NotifyBeanSign=""
################################## 定义每日签到每个接口间的延迟时间(选填) ##################################
## 默认每个签到接口并发无延迟,如需要依次进行每个接口,请自定义延迟时间,单位为毫秒,延迟作用于每个签到接口, 如填入延迟则切换顺序签到(耗时较长)
export JD_BEAN_STOP=""
################################## 定义东东农场互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyFruit1=""
MyFruit2=""
MyFruit3=""
MyFruit4=""
MyFruit5=""
MyFruit6=""
MyFruitA=""
MyFruitB=""
ForOtherFruit1=""
ForOtherFruit2=""
ForOtherFruit3=""
ForOtherFruit4=""
ForOtherFruit5=""
ForOtherFruit6=""
################################## 定义东东萌宠互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyPet1=""
MyPet2=""
MyPet3=""
MyPet4=""
MyPet5=""
MyPet6=""
MyPetA=""
MyPetB=""
ForOtherPet1=""
ForOtherPet2=""
ForOtherPet3=""
ForOtherPet4=""
ForOtherPet5=""
ForOtherPet6=""
################################## 定义种豆得豆互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyBean1=""
MyBean2=""
MyBean3=""
MyBean4=""
MyBean5=""
MyBean6=""
MyBeanA=""
MyBeanB=""
ForOtherBean1=""
ForOtherBean2=""
ForOtherBean3=""
ForOtherBean4=""
ForOtherBean5=""
ForOtherBean6=""
################################## 定义京喜工厂互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyDreamFactory1=""
MyDreamFactory2=""
MyDreamFactory3=""
MyDreamFactory4=""
MyDreamFactory5=""
MyDreamFactory6=""
MyDreamFactoryA=""
MyDreamFactoryB=""
ForOtherDreamFactory1=""
ForOtherDreamFactory2=""
ForOtherDreamFactory3=""
ForOtherDreamFactory4=""
ForOtherDreamFactory5=""
ForOtherDreamFactory6=""
################################## 定义东东工厂互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyJdFactory1=""
MyJdFactory2=""
MyJdFactory3=""
MyJdFactory4=""
MyJdFactory5=""
MyJdFactory6=""
MyJdFactoryA=""
MyJdFactoryB=""
ForOtherJdFactory1=""
ForOtherJdFactory2=""
ForOtherJdFactory3=""
ForOtherJdFactory4=""
ForOtherJdFactory5=""
ForOtherJdFactory6=""
################################## 定义京东赚赚互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyJdzz1=""
MyJdzz2=""
MyJdzz3=""
MyJdzz4=""
MyJdzz5=""
MyJdzz6=""
MyJdzzA=""
MyJdzzB=""
ForOtherJdzz1=""
ForOtherJdzz2=""
ForOtherJdzz3=""
ForOtherJdzz4=""
ForOtherJdzz5=""
ForOtherJdzz6=""
################################## 定义疯狂的JOY互助选填 ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyJoy1=""
MyJoy2=""
MyJoy3=""
MyJoy4=""
MyJoy5=""
MyJoy6=""
MyJoyA=""
MyJoyB=""
ForOtherJoy1=""
ForOtherJoy2=""
ForOtherJoy3=""
ForOtherJoy4=""
ForOtherJoy5=""
ForOtherJoy6=""
################################## 定义京喜农场互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
## 京喜农场助力码为 JSON 格式因此使用单引号json 格式如下
## {"smp":"22bdadsfaadsfadse8a","active":"jdnc_1_btorange210113_2","joinnum":"1"}
## 助力码获取可以通过 js jd_get_share_code now 命令获取
## 注意:京喜农场 种植种子发生变化的时候,互助码也会变!!
MyJxnc1=''
MyJxnc2=''
MyJxnc3=''
MyJxnc4=''
MyJxnc5=''
MyJxnc6=''
MyJxncA=''
MyJxncB=''
ForOtherJxnc1=""
ForOtherJxnc2=""
ForOtherJxnc3=""
ForOtherJxnc4=""
ForOtherJxnc5=""
ForOtherJxnc6=""
################################## 定义京喜农场TOKEN选填 ##################################
## 如果某个Cookie的账号种植的是app种子则必须填入有效的TOKEN而种植非app种子则不需要TOKEN
## TOKEN的形式{"farm_jstoken":"749a90f871adsfads8ffda7bf3b1576760","timestamp":"1610165423873","phoneid":"42c7e3dadfadsfdsaac-18f0e4f4a0cf"}
## 因TOKEN中带有双引号因此变量值两侧必须由一对单引号引起来
## TOKEN如何获取请阅读以下文件的注释https://github.com/LXK9301/jd_scripts/blob/master/jd_jxnc.js
TokenJxnc1=''
TokenJxnc2=''
TokenJxnc3=''
TokenJxnc4=''
TokenJxnc5=''
TokenJxnc6=''
################################## 定义口袋书店互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyBookShop1=""
MyBookShop2=""
MyBookShop3=""
MyBookShop4=""
MyBookShop5=""
MyBookShop6=""
MyBookShopA=""
MyBookShopB=""
ForOtherBookShop1=""
ForOtherBookShop2=""
ForOtherBookShop3=""
ForOtherBookShop4=""
ForOtherBookShop5=""
ForOtherBookShop6=""
################################## 定义签到领现金互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyCash1=""
MyCash2=""
MyCash3=""
MyCash4=""
MyCash5=""
MyCash6=""
MyCashA=""
MyCashB=""
ForOtherCash1=""
ForOtherCash2=""
ForOtherCash3=""
ForOtherCash4=""
ForOtherCash5=""
ForOtherCash6=""
################################## 定义闪购盲盒互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MySgmh1=""
MySgmh2=""
MySgmh3=""
MySgmh4=""
MySgmh5=""
MySgmh6=""
MySgmhA=""
MySgmhB=""
ForOtherSgmh1=""
ForOtherSgmh2=""
ForOtherSgmh3=""
ForOtherSgmh4=""
ForOtherSgmh5=""
ForOtherSgmh6=""
################################## 定义京东环球挑战赛活动互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
## 仅2021年2月22日(含)前有效
MyGLOBAL1=""
MyGLOBAL2=""
MyGLOBAL3=""
MyGLOBAL4=""
MyGLOBAL5=""
MyGLOBAL6=""
MyGLOBALA=""
MyGLOBALB=""
ForOtherGLOBAL1=""
ForOtherGLOBAL2=""
ForOtherGLOBAL3=""
ForOtherGLOBAL4=""
ForOtherGLOBAL5=""
ForOtherGLOBAL6=""
################################## 定义惊喜财富岛互助(选填) ##################################
## 具体填法及要求详见本文件最下方“互助码填法示例”
MyJdcfd1=""
MyJdcfd2=""
MyJdcfd3=""
MyJdcfd4=""
MyJdcfd5=""
MyJdcfd6=""
MyJdcfdA=""
MyJdcfdB=""
ForOtherJdcfd1=""
ForOtherJdcfd2=""
ForOtherJdcfd3=""
ForOtherJdcfd4=""
ForOtherJdcfd5=""
ForOtherJdcfd6=""
################################## 定义东东超市蓝币兑换数量(选填) ##################################
## 东东超市蓝币兑换,可用值包括:
## 一、0表示不兑换京豆这也是js脚本的默认值
## 二、20表示兑换20个京豆
## 三、1000表示兑换1000个京豆
## 四、可兑换清单的商品名称输入能跟唯一识别出来的关键词即可比如MARKET_COIN_TO_BEANS="抽纸"
## 注意:有些比较贵的实物商品京东只是展示出来忽悠人的,即使你零点用脚本去抢,也会提示没有或提示已下架
export MARKET_COIN_TO_BEANS="0"
################################## 定义东东超市蓝币成功兑换奖品是否静默运行(选填) ##################################
## 默认 "false" 关闭(即:奖品兑换成功后会发出通知提示),如需要静默运行不发出通知,请改为 "true"
export MARKET_REWARD_NOTIFY=""
################################## 定义东东超市是否自动升级商品和货架(选填) ##################################
## 升级顺序:解锁升级商品、升级货架,默认 "true" 自动升级,如需关闭自动升级,请改为 "false"
export SUPERMARKET_UPGRADE=""
################################## 定义东东超市是否自动更换商圈(选填) ##################################
## 小于对方300热力值自动更换商圈队伍默认 "true" 自动更换,如不想更换商圈,请改为 "false"
## 目前已无此功能,申明了也无效
# export BUSINESS_CIRCLE_JUMP=""
################################## 定义东东超市是否自动使用金币去抽奖(选填) ##################################
## 是否用金币去抽奖,默认 "false" 关闭,如需开启,请修改为 "true"
export SUPERMARKET_LOTTERY=""
################################## 定义东东超市是否自动参加PK队伍选填 ##################################
## 是否每次PK活动参加脚本作者创建的PK队伍"true" 表示参加,"false" 表示不参加,默认为 "true"
export JOIN_PK_TEAM=""
################################## 定义东东农场是否静默运行(选填) ##################################
## 默认为 "false",不静默,发送推送通知消息,如不想收到通知,请修改为 "true"
## 如果你不想完全关闭或者完全开启通知只想在特定的时间发送通知可以参考下面的“定义东东萌宠是否静默运行”部分设定几个if判断条件
export FRUIT_NOTIFY_CONTROL=""
################################## 定义东东农场是否使用水滴换豆卡(选填) ##################################
## 如果出现限时活动时100g水换20豆此时比浇水划算"true" 表示换豆(不浇水),"false" 表示不换豆(继续浇水),默认是"false"
## 如需切换为换豆(不浇水),请修改为 "true"
export FRUIT_BEAN_CARD=""
################################## 定义宠汪汪喂食克数(选填) ##################################
## 你期望的宠汪汪每次喂食克数只能填入10、20、40、80默认为10
## 如实际持有食物量小于所设置的克数,脚本会自动降一档,直到降无可降
## 具体情况请自行在宠汪汪游戏中去查阅攻略
export JOY_FEED_COUNT=""
################################## 定义宠汪汪兑换京豆数量(选填) ##################################
## 目前的可用值包括0、20、500、1000其中0表示为不自动兑换京豆如不设置将默认为"20"
## 不同等级可兑换不同数量的京豆,详情请见宠汪汪游戏中兑换京豆选项
## 500、1000的京豆每天有总量限制设置了并且你也有足够积分时也并不代表就一定能抢到
export JD_JOY_REWARD_NAME=""
################################## 定义宠汪汪兑换京豆是否静默运行(选填) ##################################
## 默认为 "false",在成功兑换京豆时将发送推送通知消息(失败不发送),如想要静默不发送通知,请修改为 "true"
export JD_JOY_REWARD_NOTIFY=""
################################## 定义宠汪汪是否自动给好友的汪汪喂食(选填) ##################################
## 默认 "false" 不会自动给好友的汪汪喂食,如想自动喂食,请改成 "true"
export JOY_HELP_FEED=""
################################## 定义宠汪汪是否自动报名宠物赛跑(选填) ##################################
## 默认 "true" 参加宠物赛跑,如需关闭,请改成 "false"
export JOY_RUN_FLAG=""
################################## 定义宠汪汪参加比赛类型(选填) ##################################
## 当JOY_RUN_FLAG不设置或设置为 "true" 时生效
## 可选值2,10,50其他值不可以。其中2代表参加双人PK赛10代表参加10人突围赛50代表参加50人挑战赛不填时默认为2
## 各个账号间请使用 & 分隔比如JOY_TEAM_LEVEL="2&2&50&10"
## 如果你有5个账号但只写了四个数字那么第5个账号将默认参加2人赛账号如果更多与此类似
export JOY_TEAM_LEVEL=""
################################## 定义宠汪汪赛跑获胜后是否推送通知(选填) ##################################
## 控制jd_joy.js脚本宠汪汪赛跑获胜后是否推送通知"false" 为否(不推送通知消息)"true" 为是(即:发送推送通知消息),默认为 "true"
export JOY_RUN_NOTIFY=""
################################## 定义摇钱树是否自动将金果卖出变成金币(选填) ##################################
## 金币有时效,默认为 "false",不卖出金果为金币,如想希望自动卖出,请修改为 "true"
export MONEY_TREE_SELL_FRUIT=""
################################## 定义东东萌宠是否静默运行(选填) ##################################
## 默认 "false"(不静默,发送推送通知消息),如想静默请修改为 true
## 每次执行脚本通知太频繁了,改成只在周三和周六中午那一次运行时发送通知提醒
## 除掉上述提及时间之外,均设置为 true静默不发通知
## 特别说明:针对北京时间有效。
if [ $(date "+%w") -eq 6 ] && [ $(date "+%H") -ge 9 ] && [ $(date "+%H") -lt 14 ]; then
export PET_NOTIFY_CONTROL="false"
elif [ $(date "+%w") -eq 3 ] && [ $(date "+%H") -ge 9 ] && [ $(date "+%H") -lt 14 ]; then
export PET_NOTIFY_CONTROL="false"
else
export PET_NOTIFY_CONTROL="true"
fi
################################## 定义京喜工厂控制哪个京东账号不运行此脚本(选填) ##################################
## 输入"1"代表第一个京东账号不运行,多个使用 & 连接,例:"1&3" 代表账号1和账号3不运行京喜工厂脚本输入"0",代表全部账号不运行京喜工厂脚本
## 如果使用了 “临时屏蔽某个Cookie” TempBlockCookie 功能,编号会发生变化
export DREAMFACTORY_FORBID_ACCOUNT=""
################################## 定义东东工厂控制哪个京东账号不运行此脚本(选填) ##################################
## 输入"1"代表第一个京东账号不运行,多个使用 & 连接,例:"1&3" 代表账号1和账号3不运行东东工厂脚本输入"0",代表全部账号不运行东东工厂脚本
## 如果使用了 “临时屏蔽某个Cookie” TempBlockCookie 功能,编号会发生变化
export JDFACTORY_FORBID_ACCOUNT=""
################################## 定义东东工厂心仪的商品(选填) ##################################
## 只有在满足以下条件时,才自动投入电力:一是存储的电力满足生产商品所需的电力,二是心仪的商品有库存,如果没有输入心仪的商品,那么当前你正在生产的商品视作心仪的商品
## 如果你看不懂上面的话,请去东东工厂游戏中查阅攻略
## 心仪的商品请输入商品的全称或能唯一识别出该商品的关键字
export FACTORAY_WANTPRODUCT_NAME=""
################################## 定义京喜农场通知级别(选填) ##################################
## 可用值: 0(不通知); 1(本次获得水滴>0); 2(任务执行); 3(任务执行+未种植种子),默认为"3"
export JXNC_NOTIFY_LEVEL="3"
################################## 定义取关参数(选填) ##################################
## jd_unsubscribe这个任务是用来取关每天做任务关注的商品和店铺默认在每次运行时取关20个商品和20个店铺
## 如果取关数量不够,可以根据情况增加,还可以设置 jdUnsubscribeStopGoods 和 jdUnsubscribeStopShop
## 商品取关数量
goodPageSize=""
## 店铺取关数量
shopPageSize=""
## 遇到此商品不再取关此商品以及它后面的商品,需去商品详情页长按拷贝商品信息
jdUnsubscribeStopGoods=""
## 遇到此店铺不再取关此店铺以及它后面的店铺,请从头开始输入店铺名称
jdUnsubscribeStopShop=""
################################## 疯狂的JOY选填 ##################################
## 疯狂的JOY循环助力"true" 表示循环助力,"false" 表示不循环助力,默认 "false"
export JDJOY_HELPSELF=""
## 疯狂的JOY京豆兑换目前最小值为500/1000京豆默认为 "0" 不开启京豆兑换
export JDJOY_APPLYJDBEAN=""
## 疯狂的JOY自动购买什么等级的JOY如需要使用请自行解除注释
# export BUY_JOY_LEVEL=""
################################## 定义是否自动加购物车(选填) ##################################
## 口袋书店和东东小窝有些任务需要将商品加进购物车才能完成,默认 "false" 不做这些任务,如想做,请设置为 "true"
export PURCHASE_SHOPS=""
################################## 定义京喜财富岛通知(选填) ##################################
## 输入true为通知,默认 "false",不填则为不通知
export CFD_NOTIFY_CONTROL=""
################################## 定义京小兑是否自动把抽奖卷兑换为兑币,(选填) ##################################
## 输入true为自动兑换,不填则为不兑换
export JD_JXD_EXCHANGE=""
################################## 定义宠汪汪是否开启内部互助,(选填) ##################################
## 输入true为开启内部互助,不填默认关闭
export JOY_RUN_HELP_MYSELF=""
################################## Telegram 代理(选填) ##################################
## Telegram 代理的 IP代理类型为 http比如你代理是 http://127.0.0.1:1080则填写 "127.0.0.1"
## 如需使用,请自行解除下一行的注释
# export TG_PROXY_HOST=""
## Telegram 代理的端口,代理类型为 http比如你代理是 http://127.0.0.1:1080则填写 "1080"
## 如需使用,请自行解除下一行的注释
# export TG_PROXY_PORT=""
################################## 是否添加DIY脚本选填 ##################################
## 如果你自己会写shell脚本并且希望在每次git_pull.sh这个脚本运行时额外运行你的DIY脚本请赋值为 "true"
## 同时,请务必将你的脚本命名为 extra.sh (只能叫这个文件名),放在 config 目录下
## 仓库下已经上传extra.sh模板如果你想使用可以参考本仓库下 extra.sh 文件地址https://raw.githubusercontent.com/dockere/jd-base/master/sample/diy.sh
EnableExtraShell=""
################################## 互助码填法示例 ##################################
## **互助码是填在My系列变量中的ForOther系统变量中只要填入My系列的变量名即可按注释中的例子拼接以东东农场为例如下所示。**
## **实际上东东农场一个账号只能给别人助力3次我多写的话只有前几个会被助力。但如果前面的账号获得的助力次数已经达到上限了那么还是会尝试继续给余下的账号助力所以多填也是有意义的。**
## **ForOther系列变量必须从1开始编号依次编下去。**
# MyFruit1="e6e04602d5e343258873af1651b603ec" # 这是Cookie1这个账号的互助码
# MyFruit2="52801b06ce2a462f95e1d59d7e856ef4" # 这是Cookie2这个账号的互助码
# MyFruit3="e2fd1311229146cc9507528d0b054da8" # 这是Cookie3这个账号的互助码
# MyFruit4="6dc9461f662d490991a31b798f624128" # 这是Cookie4这个账号的互助码
# MyFruit5="30f29addd75d44e88fb452bbfe9f2110" # 这是Cookie5这个账号的互助码
# MyFruit6="1d02fc9e0e574b4fa928e84cb1c5e70b" # 这是Cookie6这个账号的互助码
# MyFruitA="5bc73a365ff74a559bdee785ea97fcc5" # 这是我和别人交换互助另外一个用户A的互助码
# MyFruitB="6d402dcfae1043fba7b519e0d6579a6f" # 这是我和别人交换互助另外一个用户B的互助码
# MyFruitC="5efc7fdbb8e0436f8694c4c393359576" # 这是我和别人交换互助另外一个用户C的互助码
# ForOtherFruit1="${MyFruit2}@${MyFruitB}@${MyFruit4}" # Cookie1这个账号助力Cookie2的账号的账号、Cookie4的账号以及用户B
# ForOtherFruit2="${MyFruit1}@${MyFruitA}@${MyFruit4}" # Cookie2这个账号助力Cookie1的账号的账号、Cookie4的账号以及用户A
# ForOtherFruit3="${MyFruit1}@${MyFruit2}@${MyFruitC}@${MyFruit4}@${MyFruitA}@${MyFruit6}" # 解释同上东东农场实际上只能助力3次
# ForOtherFruit4="${MyFruit1}@${MyFruit2}@${MyFruit3}@${MyFruitC}@${MyFruit6}@${MyFruitA}" # 解释同上东东农场实际上只能助力3次
# ForOtherFruit5="${MyFruit1}@${MyFruit2}@${MyFruit3}@${MyFruitB}@${MyFruit4}@${MyFruit6}@${MyFruitC}@${MyFruitA}"
# ForOtherFruit6="${MyFruit1}@${MyFruit2}@${MyFruit3}@${MyFruitA}@${MyFruit4}@${MyFruit5}@${MyFruitC}"

View File

@ -1,16 +0,0 @@
# 更新shell及面板代码
55 2,13 * * * CMD_UPDATE >> ${QL_DIR}/log/git_pull.log 2>&1
# 重新build面板
# 30 7 */7 * * rebuild >> ${QL_DIR}/log/rebuild.log 2>&1
# 删除 RmLogDaysAgo 指定天数以前的旧日志,本行为不记录日志
57 13 * * * CMD_RMLOG >/dev/null 2>&1
# 重启挂机脚本
# 33 3 * * * CMD_TASK hangup
# 运行所有脚本(慎用)
# 33 9 */7 * * CMD_TASK runall
# 其他定时任务

View File

@ -0,0 +1,10 @@
# 更新qinglong
55 2,13 * * * CMD_UPDATE
# 重新build面板
# 30 7 */7 * * CMD_REBUILD >> ${QL_DIR}/log/rebuild.log 2>&1
# 删除 RmLogDaysAgo 指定天数以前的旧日志,不记录日志
57 13 * * * CMD_RMLOG >/dev/null 2>&1
# 其他定时任务

34
sample/jdCookie.js Normal file
View File

@ -0,0 +1,34 @@
/*
此文件为Node.js专用其他用户请忽略
*/
//此处填写京东账号cookie。
let CookieJDs = [
'',//账号一ck,例:pt_key=XXX;pt_pin=XXX;
'',//账号二ck,例:pt_key=XXX;pt_pin=XXX;如有更多,依次类推
]
// 判断环境变量里面是否有京东ck
if (process.env.JD_COOKIE) {
if (process.env.JD_COOKIE.indexOf('&') > -1) {
CookieJDs = process.env.JD_COOKIE.split('&');
} else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
CookieJDs = process.env.JD_COOKIE.split('\n');
} else {
CookieJDs = [process.env.JD_COOKIE];
}
}
if (JSON.stringify(process.env).indexOf('GITHUB')>-1) {
console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`);
!(async () => {
await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`)
await process.exit(0);
})()
}
CookieJDs = [...new Set(CookieJDs.filter(item => !!item))]
console.log(`\n====================共${CookieJDs.length}个京东账号Cookie=========\n`);
console.log(`==================脚本执行- 北京时间(UTC+8)${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}=====================\n`)
if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {};
for (let i = 0; i < CookieJDs.length; i++) {
if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/)) console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`);
const index = (i + 1 === 1) ? '' : (i + 1);
exports['CookieJD' + index] = CookieJDs[i].trim();
}

29
sample/package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "lxk0301",
"version": "1.0.0",
"description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}",
"main": "AlipayManor.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/lxk0301/jd_scripts.git"
},
"keywords": [
""
],
"author": "LXK9301",
"license": "ISC",
"dependencies": {
"crypto-js": "^4.0.0",
"download": "^8.0.0",
"got": "^11.5.1",
"http-server": "^0.12.3",
"qrcode-terminal": "^0.12.0",
"request": "^2.88.2",
"tough-cookie": "^4.0.0",
"tunnel": "0.0.6",
"ws": "^7.4.3"
}
}

0
shell/api.sh Executable file → Normal file
View File

View File

@ -1,4 +1,4 @@
const notify = require('/ql/scripts/sendNotify');
const notify = require('../scripts/sendNotify.js');
const title = process.argv[2];
const content = process.argv[3];

18
shell/rebuild.sh Executable file → Normal file
View File

@ -1,12 +1,13 @@
#!/usr/bin/env bash
ShellDir=${QL_DIR:-$(cd $(dirname $0); pwd)}
dir_shell=$(dirname $(readlink -f "$0"))
dir_root=$(cd $dir_shell; cd ..; pwd)
echo -e "更新shell...\n"
cd ${ShellDir}
echo -e "更新qinglong...\n"
cd $dir_root
git fetch --all
git pull
echo -e "更新shell完成...\n"
echo -e "更新更新qinglong完成...\n"
echo -e "重新build...\n"
yarn build
@ -14,14 +15,7 @@ yarn build-back
echo -e "重新build完成...\n"
echo -e "重启服务...\n"
PIDS=`ps -ef|grep "app.js"|grep -v grep`
if [ "$PIDS" != "" ]; then
pm2 restart panel
else
pm2 start ${QL_DIR}/build/app.js -n panel
fi
pm2 restart panel || pm2 start $dir_root/build/app.js -n panel 2>/dev/null
nginx -s reload
echo -e "重启服务完成...\n"

View File

@ -1,58 +0,0 @@
#!/usr/bin/env bash
## 判断环境
ShellDir=${QL_DIR:-$(cd $(dirname $0); pwd)}
LogDir=${ShellDir}/log
## 导入配置文件
. ${ShellDir}/config/cookie.sh
. ${ShellDir}/config/config.sh
## 删除运行js脚本的旧日志
function Rm_JsLog {
LogFileList=$(ls -l ${LogDir}/*/*.log | awk '{print $9}')
for log in ${LogFileList}
do
LogDate=$(echo ${log} | awk -F "/" '{print $NF}' | cut -c1-10) #文件名比文件属性获得的日期要可靠
if [[ $(uname -s) == Darwin ]]
then
DiffTime=$(($(date +%s) - $(date -j -f "%Y-%m-%d" "${LogDate}" +%s)))
else
DiffTime=$(($(date +%s) - $(date +%s -d "${LogDate}")))
fi
[ ${DiffTime} -gt $((${RmLogDaysAgo} * 86400)) ] && rm -vf ${log}
done
}
## 删除git_pull.sh的运行日志
function Rm_GitPullLog {
if [[ $(uname -s) == Darwin ]]
then
DateDelLog=$(date -v-${RmLogDaysAgo}d "+%Y-%m-%d")
else
Stmp=$(($(date "+%s") - 86400 * ${RmLogDaysAgo}))
DateDelLog=$(date -d "@${Stmp}" "+%Y-%m-%d")
fi
LineEndGitPull=$[$(cat ${LogDir}/git_pull.log | grep -n "${DateDelLog} " | head -1 | awk -F ":" '{print $1}') - 3]
[ ${LineEndGitPull} -gt 0 ] && perl -i -ne "{print unless 1 .. ${LineEndGitPull} }" ${LogDir}/git_pull.log
}
## 删除空文件夹
function Rm_EmptyDir {
cd ${LogDir}
for dir in $(ls)
do
if [ -d ${dir} ] && [[ $(ls ${dir}) == "" ]]; then
rm -rf ${dir}
fi
done
}
## 运行
if [ -n "${RmLogDaysAgo}" ]; then
echo -e "查找旧日志文件中...\n"
Rm_JsLog
Rm_GitPullLog
Rm_EmptyDir
echo -e "删除旧日志执行完毕\n"
fi

View File

@ -41,7 +41,6 @@ remove_empty_dir () {
if [[ ${RmLogDaysAgo} ]]; then
echo -e "查找旧日志文件中...\n"
remove_js_log
remove_jup_log
remove_empty_dir
echo -e "删除旧日志执行完毕\n"
fi

View File

@ -12,7 +12,7 @@ file_sharecode=$dir_config/sharecode.sh
file_config_user=$dir_config/config.sh
file_auth_sample=$dir_sample/auth.sample.json
file_auth_user=$dir_config/auth.json
file_diy_shell=$dir_config/diy.sh
file_extra_shell=$dir_config/extra.sh
## 清单文件
list_crontab_user=$dir_config/crontab.list
@ -22,7 +22,7 @@ list_own_user=$dir_list_tmp/own_user.list
list_own_add=$dir_list_tmp/own_add.list
list_own_drop=$dir_list_tmp/own_drop.list
## 需组合的环境变量列表env_name需要和var_name一一对应
## 需组合的环境变量列表env_name需要和var_name一一对应需要从api取信息
env_name=(
JD_COOKIE
)
@ -36,12 +36,14 @@ link_name=(
mytask
rmlog
update
rebuild
)
original_name=(
task.sh
task.sh
rmlog.sh
update.sh
rebuild.sh
)
## 导入配置文件不校验
@ -65,16 +67,17 @@ notify () {
local title=$(echo $1 | perl -pe 's|-|_|g')
local msg="$(echo -e $2)"
if [ -d $dir_scripts_node_modules ]; then
node $dir_root/notify.js "$title" "$msg"
node $dir_scripts/notify.js "$title" "$msg"
fi
}
## 统计用户数量
count_user_sum () {
for ((i=1; i<=${SUM:-$((3 * 4))}; i++)); do
local tmp1=Cookie$i
local tmp2=${!tmp1}
[[ $tmp2 ]] && user_sum=$i || break
user_sum=0
for line in $(cat $file_cookie); do
let user_sum++
[[ $user_sum -gt $((3 * 5)) ]] && break
eval Cookie${user_sum}="\"$line\""
done
}
@ -150,10 +153,56 @@ define_cmd () {
fi
fi
for ((i=0; i<${#link_name[*]}; i++)); do
export cmd_${link_name[i]}="${cmd_prefix}${link_name[i]}${cmd_suffix}"
eval cmd_${link_name[i]}="${cmd_prefix}${link_name[i]}${cmd_suffix}"
done
}
## 统计 own 仓库数量
count_own_repo_sum () {
own_repo_sum=0
for ((i=1; i<=1000; i++)); do
local tmp1=RepoUrl$i
local tmp2=${!tmp1}
[[ $tmp2 ]] && own_repo_sum=$i || break
done
}
## 形成 own 仓库的文件夹名清单依赖于import_config_and_check或import_config_no_check
## array_own_repo_pathrepo存放的绝对路径组成的数组array_own_scripts_path所有要使用的脚本所在的绝对路径组成的数组
gen_own_dir_and_path () {
local scripts_path_num="-1"
local repo_num tmp1 tmp2 tmp3 tmp4 tmp5 dir
if [[ $own_repo_sum -ge 1 ]]; then
for ((i=1; i<=$own_repo_sum; i++)); do
repo_num=$((i - 1))
tmp1=RepoUrl$i
array_own_repo_url[$repo_num]=${!tmp1}
tmp2=RepoBranch$i
array_own_repo_branch[$repo_num]=${!tmp2}
array_own_repo_dir[$repo_num]=$(echo ${array_own_repo_url[$repo_num]} | perl -pe "s|.+com(/\|:)([\w-]+)/([\w-]+)(\.git)?|\2_\3|")
array_own_repo_path[$repo_num]=$dir_scripts/${array_own_repo_dir[$repo_num]}
tmp3=RepoPath$i
if [[ ${!tmp3} ]]; then
for dir in ${!tmp3}; do
let scripts_path_num++
tmp4="${array_own_repo_dir[repo_num]}/$dir"
tmp5=$(echo $tmp4 | perl -pe "{s|//|/|g; s|/$||}") # 去掉多余的/
array_own_scripts_path[$scripts_path_num]="$dir_scripts/$tmp5"
done
else
let scripts_path_num++
array_own_scripts_path[$scripts_path_num]="${array_own_repo_path[$repo_num]}"
fi
done
fi
if [[ ${#RawUrl[*]} -ge 1 ]]; then
let scripts_path_num++
array_own_scripts_path[$scripts_path_num]=$dir_raw # 只有own脚本所在绝对路径附加了raw文件夹其他数组均不附加
fi
}
## 修复配置文件
fix_config () {
make_dir $dir_config
@ -168,10 +217,10 @@ fix_config () {
echo
fi
perl -i -pe "{
s|CMD_UPDATE|$cmd_jup|g;
s|ROOT_DIR|$dir_root|g;
s|CMD_RMLOG|$cmd_jlog|g;
s|CMD_UPDATE|$cmd_update|g;
s|CMD_REBUILD|$cmd_rebuild|g;
s|CMD_RMLOG|$cmd_rmlog|g;
s|CMD_TASK|$cmd_task|g;
s|CMD_MTASK|$cmd_mtask|g
s|CMD_MYTASK|$cmd_mytask|g
}" $list_crontab_user
}

View File

@ -46,38 +46,15 @@ combine_one () {
done
}
## 转换JD_BEAN_SIGN_STOP_NOTIFY或JD_BEAN_SIGN_NOTIFY_SIMPLE
trans_JD_BEAN_SIGN_NOTIFY () {
case ${NotifyBeanSign} in
0)
export JD_BEAN_SIGN_STOP_NOTIFY="true"
;;
1)
export JD_BEAN_SIGN_NOTIFY_SIMPLE="true"
;;
2)
export JD_BEAN_SIGN_NOTIFY_SIMPLE="false"
;;
esac
}
## 转换UN_SUBSCRIBES
trans_UN_SUBSCRIBES () {
export UN_SUBSCRIBES="${goodPageSize}\n${shopPageSize}\n${jdUnsubscribeStopGoods}\n${jdUnsubscribeStopShop}"
}
## 申明全部变量,$1all/Cookie编号
export_all_env () {
local type=$1
local latest_log
if [[ $AutoHelpOther == true ]] && [[ $(ls $dir_code) ]]; then
latest_log=$(ls -r $dir_code | head -1)
. $dir_code/$latest_log
fi
[ -f $file_sharecode ] && . $file_sharecode
[[ $type == all ]] && combine_all || combine_one $type
trans_JD_BEAN_SIGN_NOTIFY
trans_UN_SUBSCRIBES
}
## 选择python3还是node
define_program () {
[[ $p1 == *.js ]] && which_program="node"
[[ $p1 == *.py ]] && which_program="python3"
}
random_delay () {
@ -94,36 +71,32 @@ random_delay () {
## scripts目录下所有可运行脚本数组
gen_array_scripts () {
gen_own_dir_and_path
local dir_current=$(pwd)
local i=0
cd $dir_scripts
for ((scripts_path_num=0; scripts_path_num<${#array_own_scripts_path[*]}; scripts_path_num++)); do
cd ${array_own_scripts_path[$scripts_path_num]}
for file in $(ls); do
if [ -f $file ] && [[ $(grep "new Env" $file) ]] && [[ $file == *.js && $file != sendNotify.js && $file != JD_extra_cookie.js ]]; then
array_scripts[i]=$file
array_scripts[i]="${array_own_scripts_path[$scripts_path_num]}/$file"
array_scripts_name[i]=$(grep "new Env" $file | awk -F "'|\"" '{print $2}' | head -1)
[[ -z ${array_scripts_name[i]} ]] && array_scripts_name[i]="<未识别出活动名称>"
let i++
fi
done
done
cd $dir_current
}
## 使用说明
usage () {
define_cmd
gen_array_scripts
echo -e "jtask命令运行 jd_scripts 脚本,如果已经将非 jd_scripts 脚本复制到 scripts 目录下,也可以使用此命令,用法为:"
echo -e "1.$cmd_jtask <js_name> # 依次执行如果设置了随机延迟并且当时时间不在0-2、30-31、59分内将随机延迟一定秒数"
echo -e "2.$cmd_jtask <js_name> now # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中"
echo -e "3.$cmd_jtask <js_name> conc # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中"
echo -e "4.$cmd_jtask runall # 依次运行所有jd_scripts中的非挂机脚本非常耗时"
echo -e "5.$cmd_jtask hangup # 重启挂机程序"
echo -e "\notask命令运行 own 脚本需要输入脚本的绝对路径或相对路径定时任务中必须是绝对路径otask会将该脚本复制到 scripts 目录下再运行,用法为:"
echo -e "1.$cmd_otask <js_path> # 依次执行如果设置了随机延迟并且当时时间不在0-2、30-31、59分内将随机延迟一定秒数"
echo -e "2.$cmd_otask <js_path> now # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中"
echo -e "3.$cmd_otask <js_path> conc # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中"
echo -e "\nmtask命令运行你自己添加的脚本用法同jtask如果脚本不在scripts目录下则需要输入完整路径同otask。jtask otask mtask均为同一脚本的不同名字三者仅用来在crontab.list中区分不同类型的任务以方便自动增删任务手动运行直接运行jtask即可。"
echo -e "\n当前scripts目录下有以下脚本可以运行"
echo -e "\ntask命令运行本程序自动添加进crontab的脚本需要输入脚本的绝对路径或相对路径定时任务中必须是绝对路径用法为"
echo -e "1.$cmd_task <js_path> # 依次执行如果设置了随机延迟并且当时时间不在0-2、30-31、59分内将随机延迟一定秒数"
echo -e "2.$cmd_task <js_path> now # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中"
echo -e "3.$cmd_task <js_path> conc # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中"
echo -e "\nmytask命令运行你自己添加的脚本用法同task。mytask和task命令均为同一脚本的不同名字二者仅用来在crontab.list中区分不同类型的任务以方便自动增删任务手动直接运行task即可。"
echo -e "\n当前有以下脚本可以运行"
for ((i=0; i<${#array_scripts[*]}; i++)); do
echo -e "$(($i + 1)).${array_scripts_name[i]}${array_scripts[i]}"
done
@ -135,101 +108,22 @@ run_nohup () {
nohup node $file_name &>$log_path &
}
## 查找脚本路径与准确的文件名,$1脚本传入的参数输出的file_name不带后缀.js
find_file_and_path () {
local para=$1
local file_name_tmp1=$(echo $para | perl -pe "s|\.js||")
local file_name_tmp2=$(echo $para | perl -pe "{s|jd_||; s|\.js||; s|^|jd_|}")
local seek_path="$dir_scripts $dir_scripts/backUp"
file_name=""
which_path=""
for path in $seek_path; do
if [ -f $path/$file_name_tmp1.js ]; then
file_name=$file_name_tmp1
which_path=$path
break
elif [ -f $path/$file_name_tmp2.js ]; then
file_name=$file_name_tmp2
which_path=$path
break
fi
done
if [ -f $para ]; then
local file_name_tmp3=$(echo $para | awk -F "/" '{print $NF}' | perl -pe "s|\.js||")
if [[ $(grep -E "^$file_name_tmp3$" $list_task_jd_scripts) ]]; then
echo -e "\njd_scripts项目存在同名文件$file_name_tmp3.js不复制$para,直接执行$dir_scripts/$file_name_tmp3.js ...\n"
else
echo -e "\n复制 $para$dir_scripts 下,并执行...\n"
cp -f $para $dir_scripts
fi
file_name=$file_name_tmp3
which_path=$dir_scripts
fi
}
## 运行挂机脚本
run_hungup () {
local hangup_file="jd_crazy_joy_coin"
cd $dir_scripts
for file in $hangup_file; do
import_config_and_check $file
count_user_sum
export_all_env all
if type pm2 >/dev/null 2>&1; then
pm2 stop $file.js 2>/dev/null
pm2 flush
pm2 start -a $file.js --watch "$dir_scripts/$file.js" --name=$file
else
if [[ $(ps -ef | grep "$file" | grep -v "grep") != "" ]]; then
ps -ef | grep "$file" | grep -v "grep" | awk '{print $2}' | xargs kill -9
fi
make_dir $dir_log/$file
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
log_path="$dir_log/$file/$log_time.log"
run_nohup $file.js >/dev/null 2>&1
fi
done
}
## 一次性运行所有jd_scripts脚本
run_all_jd_scripts () {
define_cmd
if [ ! -f $list_task_jd_scripts ]; then
cat $list_crontab_jd_scripts | grep -E "j[drx]_\w+\.js" | perl -pe "s|.+(j[drx]_\w+)\.js.+|\1|" | sort -u > $list_task_jd_scripts
fi
echo -e "\n==================== 开始运行所有非挂机脚本 ====================\n"
echo -e "请注意:本过程将非常非常耗时,一个账号可能长达几小时,账号越多耗时越长,如果是手动运行,退出终端也将终止运行。\n"
echo -e "倒计时5秒...\n"
for ((sec=5; sec>0; sec--)); do
echo -e "$sec...\n"
sleep 1
done
for file in $(cat $list_task_jd_scripts); do
echo -e "==================== 运行 $file.js 脚本 ====================\n"
$cmd_jtask $file now
done
}
## 正常运行单个脚本,$1传入参数
run_normal () {
local p=$1
find_file_and_path $p
if [[ $file_name ]] && [[ $which_path ]]; then
import_config_and_check "$file_name"
local p1=$1
if [ -f $p1 ]; then
import_config_and_check "$p1"
update_crontab
count_user_sum
define_program
export_all_env all
[[ $# -eq 1 ]] && random_delay
[[ $user_sum -ge 60 ]] && rm -rf $dir_config/* &>/dev/null
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
log_path="$dir_log/$file_name/$log_time.log"
make_dir "$dir_log/$file_name"
cd $which_path
node $file_name.js 2>&1 | tee $log_path
log_path="$dir_log/$p1/$log_time.log"
make_dir "$dir_log/$p1"
$which_program $p1 2>&1 | tee $log_path
else
echo -e "\n $p 脚本不存在,请确认...\n"
echo -e "\n $p1 脚本不存在,请确认...\n"
usage
fi
}
@ -237,14 +131,13 @@ run_normal () {
## 并发执行因为是并发所以日志只能直接记录在日志文件中日志文件以Cookie编号结尾前台执行并发跑时不会输出日志
## 并发执行时,设定的 RandomDelay 不会生效,即所有任务立即执行
run_concurrent () {
local p=$1
find_file_and_path $p
if [[ $file_name ]] && [[ $which_path ]]; then
import_config_and_check "$file_name"
local p1=$1
if [ -f $p1 ]; then
import_config_and_check "$p1"
update_crontab
count_user_sum
[[ $user_sum -ge 60 ]] && rm -rf $dir_config/* &>/dev/null
make_dir $dir_log/$file_name
define_program
make_dir $dir_log/$p1
log_time=$(date "+%Y-%m-%d-%H-%M-%S.%N")
echo -e "\n各账号间已经在后台开始并发执行前台不输入日志日志直接写入文件中。\n"
for ((user_num=1; user_num<=$user_sum; user_num++)); do
@ -252,9 +145,8 @@ run_concurrent () {
[[ $user_num -eq $num ]] && continue 2
done
export_all_env $user_num
log_path="$dir_log/$file_name/${log_time}_${user_num}.log"
cd $which_path
node $file_name.js &>$log_path &
log_path="$dir_log/$p1/${log_time}_${user_num}.log"
$which_program $p1 &>$log_path &
done
else
echo -e "\n $p 脚本不存在,请确认...\n"
@ -263,24 +155,15 @@ run_concurrent () {
}
## 命令检测
main () {
case $# in
0)
echo
usage
;;
1)
case $1 in
hangup)
run_hungup
;;
runall)
run_all_jd_scripts
;;
*)
run_normal $1
;;
esac
;;
2)
case $2 in
now)
@ -300,3 +183,6 @@ case $# in
usage
;;
esac
}
main "$@"

View File

@ -7,6 +7,7 @@ send_mark=$dir_shell/send_mark
## 导入通用变量与函数
. $dir_shell/share.sh
. $dir_shell/api.sh
## 导入配置文件,检测平台,创建软连接,识别命令,修复配置文件
detect_termux
@ -14,46 +15,7 @@ detect_macos
link_shell
define_cmd
fix_config
import_config_no_check jup
## 更新crontabgitee服务器同一时间限制5个链接因此每个人更新代码必须错开时间每次执行git_pull随机生成。
## 每天次数随机更新时间随机更新秒数随机至少4次至多6次大部分为5次符合正态分布。
random_update_jup_cron () {
if [[ $(date "+%-H") -le 4 ]] && [ -f $list_crontab_user ]; then
local random_min=$(gen_random_num 60)
local random_sleep=$(gen_random_num 56)
local random_hour_array[0]=$(gen_random_num 5)
local random_hour=${random_hour_array[0]}
local i j tmp
for ((i=1; i<14; i++)); do
j=$(($i - 1))
tmp=$(($(gen_random_num 3) + ${random_hour_array[j]} + 4))
[[ $tmp -lt 24 ]] && random_hour_array[i]=$tmp || break
done
for ((i=1; i<${#random_hour_array[*]}; i++)); do
random_hour="$random_hour,${random_hour_array[i]}"
done
perl -i -pe "s|.+( $cmd_update)( .*\|$)|$random_min $random_hour \* \* \* sleep $random_sleep && \1|" $list_crontab_user
crontab $list_crontab_user
fi
}
## 重置仓库remote urldocker专用$1要重置的目录$2要重置为的网址
reset_romote_url () {
local dir_current=$(pwd)
local dir_work=$1
local url=$2
if [ -d "$dir/.git" ]; then
cd $dir_work
git remote set-url origin $url
git reset --hard
cd $dir_current
fi
}
import_config_no_check "update"
## 克隆脚本,$1仓库地址$2仓库保存路径$3分支可省略
git_clone_scripts () {
@ -66,69 +28,22 @@ git_clone_scripts () {
exit_status=$?
}
## 更新脚本,$1仓库保存路径
## 更新脚本,$1仓库保存路径$2分支可省略
git_pull_scripts () {
local dir_current=$(pwd)
local dir_work=$1
local cmd_branch
[[ $2 ]] && cmd_branch="origin/$branch" || cmd_branch=""
cd $dir_work
echo -e "开始更新仓库:$dir_work\n"
git fetch --all
exit_status=$?
git reset --hard
git reset --hard $cmd_branch
git pull
cd $dir_current
}
## 统计 own 仓库数量
count_own_repo_sum () {
if [[ -z ${RepoUrl1} ]]; then
own_repo_sum=0
else
for ((i=1; i<=1000; i++)); do
local tmp1=RepoUrl$i
local tmp2=${!tmp1}
[[ $tmp2 ]] && own_repo_sum=$i || break
done
fi
}
## 形成 own 仓库的文件夹名清单依赖于import_config_and_check或import_config_no_check
## array_own_repo_pathrepo存放的绝对路径组成的数组array_own_scripts_path所有要使用的脚本所在的绝对路径组成的数组
gen_own_dir_and_path () {
local scripts_path_num="-1"
local repo_num tmp1 tmp2 tmp3 tmp4 tmp5 dir
if [[ $own_repo_sum -ge 1 ]]; then
for ((i=1; i<=$own_repo_sum; i++)); do
repo_num=$((i - 1))
tmp1=RepoUrl$i
array_own_repo_url[$repo_num]=${!tmp1}
tmp2=RepoBranch$i
array_own_repo_branch[$repo_num]=${!tmp2}
array_own_repo_dir[$repo_num]=$(echo ${array_own_repo_url[$repo_num]} | perl -pe "s|.+com(/\|:)([\w-]+)/([\w-]+)(\.git)?|\2_\3|")
array_own_repo_path[$repo_num]=$dir_scripts/${array_own_repo_dir[$repo_num]}
tmp3=RepoPath$i
if [[ ${!tmp3} ]]; then
for dir in ${!tmp3}; do
let scripts_path_num++
tmp4="${array_own_repo_dir[repo_num]}/$dir"
tmp5=$(echo $tmp4 | perl -pe "{s|//|/|g; s|/$||}") # 去掉多余的/
array_own_scripts_path[$scripts_path_num]="$dir_scripts/$tmp5"
done
else
let scripts_path_num++
array_own_scripts_path[$scripts_path_num]="${array_own_repo_path[$repo_num]}"
fi
done
fi
if [[ ${#RawUrl[*]} -ge 1 ]]; then
let scripts_path_num++
array_own_scripts_path[$scripts_path_num]=$dir_raw # 只有own脚本所在绝对路径附加了raw文件夹其他数组均不附加
fi
}
## 生成脚本的相对路径清单
## 生成脚本的路径清单文件
gen_list_own () {
local dir_current=$(pwd)
rm -f $dir_list_tmp/own*.list >/dev/null 2>&1
@ -238,6 +153,22 @@ npm_install_2 () {
cd $dir_current
}
## 更新依赖
update_depend () {
if [ ! -s $dir_scripts/package.json ] || [[ $(diff $dir_sample/package.json $dir_scripts/package.json) ]]; then
cp -f $dir_sample/package.json $dir_scripts/package.json
npm_install_2 $dir_scripts
fi
if [ ! -s $dir_scripts/sendNotify.js ] || [[ $(diff $dir_sample/sendNotify.js $dir_scripts/sendNotify.js) ]]; then
cp -f $dir_sample/sendNotify.js $dir_scripts/sendNotify.js
fi
if [ ! -s $dir_scripts/jdCookie.js ] || [[ $(diff $dir_sample/jdCookie.js $dir_scripts/jdCookie.js) ]]; then
cp -f $dir_sample/jdCookie.js $dir_scripts/jdCookie.js
fi
}
## 输出是否有新的或失效的定时任务,$1新的或失效的任务清单文件路径$2新/失效
output_list_add_drop () {
local list=$1
@ -256,10 +187,10 @@ del_cron () {
local detail detail2
if [ -s $list_drop ] && [ -s $list_crontab_user ]; then
detail=$(cat $list_drop)
echo -e "开始尝试自动删除$type2的定时任务...\n"
echo -e "开始尝试自动删除失效的定时任务...\n"
for cron in $detail; do
local tmp=$(echo $cron | perl -pe "s|/|\.|g")
perl -i -ne "{print unless / $type $tmp( |$)/}" $list_crontab_user
perl -i -ne "{print unless / $cmd_task $tmp( |$)/}" $list_crontab_user
done
crontab $list_crontab_user
detail2=$(echo $detail | perl -pe "s| |\\\n|g")
@ -268,16 +199,16 @@ del_cron () {
fi
}
## 自动增加自己额外的脚本的定时任务需要1.AutoAddCron 设置为 true2.正常更新js脚本没有报错3.存在新任务4.crontab.list存在并且不为空
## 自动增加定时任务需要1.AutoAddCron 设置为 true2.正常更新js脚本没有报错3.存在新任务4.crontab.list存在并且不为空
## $1新任务清单文件路径
add_cron () {
add_cron_step_1 () {
local list_add=$1
local list_crontab_own_tmp=$dir_list_tmp/crontab_own.list
[ -f $list_crontab_own_tmp ] && rm -f $list_crontab_own_tmp
if [[ ${AutoAddCron} == true ]] && [ -s $list_add ] && [ -s $list_crontab_user ]; then
echo -e "开始尝试自动添加 own 脚本的定时任务...\n"
if [ -s $list_crontab_user ]; then
echo -e "开始尝试自动添加定时任务...\n"
local detail=$(cat $list_add)
for file_full_path in $detail; do
local file_name=$(echo $file_full_path | awk -F "/" '{print $NF}')
@ -299,13 +230,12 @@ add_cron () {
[ -f $list_crontab_own_tmp ] && rm -f $list_crontab_own_tmp
}
## 向系统添加定时任务以及通知,$1写入crontab.list时的exit状态$2新增清单文件路径$3jd_scripts脚本/own脚本
add_cron_notify () {
## 向系统添加定时任务以及通知,$1写入crontab.list时的exit状态$2新增清单文件路径
add_cron_step_2 () {
local status_code=$1
local list_add=$2
local tmp=$(echo $(cat $list_add))
local detail=$(echo $tmp | perl -pe "s| |\\\n|g")
local type=$3
if [[ $status_code -eq 0 ]]; then
crontab $list_crontab_user
echo -e "成功添加新的定时任务...\n"
@ -321,7 +251,8 @@ update_own_repo () {
[[ ${#array_own_repo_url[*]} -gt 0 ]] && echo -e "--------------------------------------------------------------\n"
for ((i=0; i<${#array_own_repo_url[*]}; i++)); do
if [ -d ${array_own_repo_path[i]}/.git ]; then
git_pull_scripts ${array_own_repo_path[i]}
reset_romote_url ${array_own_repo_path[i]} ${array_own_repo_url[i]} &>/dev/null
git_pull_scripts ${array_own_repo_path[i]} ${array_own_repo_branch[i]}
else
git_clone_scripts ${array_own_repo_url[i]} ${array_own_repo_path[i]} ${array_own_repo_branch[i]}
fi
@ -331,7 +262,6 @@ update_own_repo () {
## 更新所有 raw 文件
update_own_raw () {
local rm_mark
[[ ${#RawUrl[*]} -gt 0 ]] && echo -e "--------------------------------------------------------------\n"
for ((i=0; i<${#RawUrl[*]}; i++)); do
raw_file_name[$i]=$(echo ${RawUrl[i]} | awk -F "/" '{print $NF}')
@ -345,125 +275,46 @@ update_own_raw () {
[ -f "$dir_raw/${raw_file_name[$i]}.new" ] && rm -f "$dir_raw/${raw_file_name[$i]}.new"
fi
done
for file in $(ls $dir_raw); do
rm_mark="yes"
for ((i=0; i<${#raw_file_name[*]}; i++)); do
if [[ $file == ${raw_file_name[$i]} ]]; then
rm_mark="no"
break
fi
done
[[ $rm_mark == yes ]] && rm -f $dir_raw/$file 2>/dev/null
done
}
## 调用用户自定义的diy.sh
run_diy_shell () {
## 调用用户自定义的extra.sh
run_extra_shell () {
if [[ ${EnableExtraShell} == true ]]; then
if [ -f $file_diy_shell ]
if [ -f $file_extra_shell ]
then
echo -e "--------------------------------------------------------------\n"
. $file_diy_shell
. $file_extra_shell
else
echo -e "$file_diy_shell文件不存在跳过执行DIY脚本...\n"
echo -e "$file_extra_shell文件不存在,跳过执行...\n"
fi
fi
}
## 在日志中记录时间与路径
record_time_in_log () {
echo "
--------------------------------------------------------------
系统时间:$(date "+%Y-%m-%d %H:%M:%S")
根目录:$dir_root
scripts目录$dir_scripts
--------------------------------------------------------------
"
## 脚本用法
usage () {
echo -e "本脚本用法:"
echo -e "1. $cmd_update # 更新qinglong、所有你设置的仓库和raw文件如果启用了EnableExtraShell还将在最后运行你自己编写的extra.sh"
echo -e "2. $cmd_update ql # 只更新qinglong和输入 $cmd_update qinglong 时功能一样不会运行extra.sh"
echo -e "3. $cmd_update <folder> # 指定scripts脚本目录下某个文件夹名称只更新这个文件夹中的脚本当该文件夹为git仓库才可使用此命令不会运行extra.sh"
}
#################################################################################################################################
## 更新jup任务的cron
random_update_jup_cron
## 重置仓库romote url
if [[ $QL_DIR ]] && [[ $ENABLE_RESET_REPO_URL == true ]]; then
reset_romote_url $dir_shell $url_shell >/dev/null
reset_romote_url $dir_scripts $url_scripts >/dev/null
fi
## 更新shell
git_pull_scripts $dir_shell
## 更新qinglong
update_qinglong () {
git_pull_scripts $dir_root
if [[ $exit_status -eq 0 ]]; then
echo -e "\n更新$dir_shell成功...\n"
echo -e "\n更新$dir_root成功...\n"
make_dir $dir_config
cp -f $file_config_sample $dir_config/config.sample.sh
update_docker_entrypoint
update_bot_py
update_depend
detect_config_version
else
echo -e "\n更新$dir_shell失败,请检查原因...\n"
echo -e "\n更新$dir_root失败,请检查原因...\n"
fi
}
## 更新scripts
## 更新前先存储package.json和githubAction.md的内容
[ -f $dir_scripts/package.json ] && scripts_depend_old=$(cat $dir_scripts/package.json)
[ -f $dir_scripts/githubAction.md ] && cp -f $dir_scripts/githubAction.md $dir_list_tmp/githubAction.md
## 更新或克隆scripts
if [ -d $dir_scripts/.git ]; then
git_pull_scripts $dir_scripts
else
git_clone_scripts $url_scripts $dir_scripts
fi
if [[ $exit_status -eq 0 ]]; then
echo -e "\n更新$dir_scripts成功...\n"
## npm install
[ ! -d $dir_scripts/node_modules ] && npm_install_1 $dir_scripts
[ -f $dir_scripts/package.json ] && scripts_depend_new=$(cat $dir_scripts/package.json)
[[ "$scripts_depend_old" != "$scripts_depend_new" ]] && npm_install_2 $dir_scripts
## diff cron
gen_list_task
diff_cron $list_task_jd_scripts $list_task_user $list_task_add $list_task_drop
## 失效任务通知
if [ -s $list_task_drop ]; then
output_list_add_drop $list_task_drop "失效"
[[ ${AutoDelCron} == true ]] && del_cron $list_task_drop jtask
fi
## 新增任务通知
if [ -s $list_task_add ]; then
output_list_add_drop $list_task_add "新"
add_cron_jd_scripts $list_task_add
[[ ${AutoAddCron} == true ]] && add_cron_notify $exit_status $list_task_add "jd_scripts脚本"
fi
## 环境变量变化通知
echo -e "检测环境变量清单文件 $dir_scripts/githubAction.md 是否有变化...\n"
diff $dir_list_tmp/githubAction.md $dir_scripts/githubAction.md | tee $dir_list_tmp/env.diff
if [ ! -s $dir_list_tmp/env.diff ]; then
echo -e "$dir_scripts/githubAction.md 没有变化...\n"
elif [ -s $dir_list_tmp/env.diff ] && [[ ${EnvChangeNotify} == true ]]; then
notify_title="检测到环境变量清单文件有变化"
notify_content="减少的内容:\n$(grep -E '^-[^-]' $dir_list_tmp/env.diff)\n\n增加的内容\n$(grep -E '^\+[^\+]' $dir_list_tmp/env.diff)"
notify "$notify_title" "$notify_content"
fi
else
echo -e "\n更新$dir_scripts失败,请检查原因...\n"
fi
## 更新own脚本
## 更新所有脚本
update_all_scripts () {
count_own_repo_sum
gen_own_dir_and_path
if [[ ${#array_own_scripts_path[*]} -gt 0 ]]; then
@ -475,17 +326,58 @@ if [[ ${#array_own_scripts_path[*]} -gt 0 ]]; then
if [ -s $list_own_drop ]; then
output_list_add_drop $list_own_drop "失效"
[[ ${AutoDelCron} == true ]] && del_cron $list_own_drop otask
[[ ${AutoDelCron} == true ]] && del_cron $list_own_drop
fi
if [ -s $list_own_add ]; then
output_list_add_drop $list_own_add "新"
add_cron $list_own_add
[[ ${AutoAddCron} == true ]] && add_cron_notify $exit_status $list_own_add "own脚本"
if [[ ${AutoAddCron} == true ]]; then
add_cron_step_1 $list_own_add
add_cron_step_2 $exit_status $list_own_add
fi
fi
else
perl -i -ne "{print unless / $cmd_task /}" $list_crontab_user
fi
}
## 更新指定仓库
update_specify_scripts_repo () {
local tmp_dir=$1
if [ -d $dir_scripts/$tmp_dir ]; then
git_pull_scripts $dir_scripts/$tmp_dir
else
echo -e "$dir_scripts/$tmp_dir 不存在...\n"
usage
fi
}
main () {
log_time=$(date "+%Y-%m-%d-%H-%M-%S")
log_path="$dir_log/update/${log_time}.log"
make_dir "$dir_log/update"
case $# in
0)
update_qinglong | tee $log_path
update_all_scripts | tee -a $log_path
run_extra_shell | tee -a $log_path
exit 0
;;
1)
case $1 in
ql | qinglong)
update_qinglong | tee $log_path
;;
*)
update_specify_scripts_repo | tee $log_path
;;
esac
exit 0
;;
*)
usage
exit 0
;;
esac
}
main "$@"