From 77a3c5f905903613ef99e3ddd7bf0fb5cf1fbee1 Mon Sep 17 00:00:00 2001 From: anonymous Date: Wed, 7 Apr 2021 20:42:19 +0800 Subject: [PATCH] dev --- sample/config.sample.sh | 38 ++++++------ shell/api.sh | 4 +- shell/task.sh | 8 ++- shell/update.sh | 127 ++++++++++++++++++++++++---------------- 4 files changed, 103 insertions(+), 74 deletions(-) diff --git a/sample/config.sample.sh b/sample/config.sample.sh index 52ce8f6e..5c02cbe1 100644 --- a/sample/config.sample.sh +++ b/sample/config.sample.sh @@ -6,20 +6,20 @@ ## 临时屏蔽某个Cookie -## 多个Cookie编号以半角的空格分隔,两侧一对半角双引号,使用此功能后,在运行js脚本时账户编号将发生变化 +## 多个Cookie编号以半角的空格分隔,两侧一对半角双引号,使用此功能后,在运行脚本时账户编号将发生变化 ## 举例1:TempBlockCookie="2" 临时屏蔽掉Cookie2 ## 举例2:TempBlockCookie="2 4" 临时屏蔽掉Cookie2和Cookie4 TempBlockCookie="" -## 如果只是想要屏蔽某个账号不跑某一些脚本,可以参考下面 case 这个命令的例子来控制,case的条件中请输入脚本的绝对路径,也就是在crontab.list中的脚本路径是什么,这里就填入什么 +## 如果只是想要屏蔽某个账号不跑某一些脚本,可以参考下面 case 这个命令的例子来控制,case的条件中请输入脚本从scripts目录出发的相对路径,也就是在crontab.list中的task命令后面的脚本路径是什么,这里就填入什么 ## case $1 in -## /ql/scripts/lxk0301_jd_scripts/jd_fruit.js) +## 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) +## lxk0301_jd_scripts/jd_dreamFactory.js | 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) +## lxk0301_jd_scripts/jd_jdzz.js | whyour_hundun/quanx/jx_factory.js) ## TempBlockCookie="3 6" # 账号3、账号6不玩lxk0301_jd_scripts下的jd_jdzz.js和whyour_hundun下子文件夹quanx中的jx_factory.js ## ;; ## esac @@ -50,21 +50,21 @@ EnableExtraShell="" ## 启用其他开发者的仓库方式一(选填):完整更新整个仓库,针对同一个仓库,方式一和方式二只能选择一种 -## OwnRepoUrl:仓库地址清单,必须从1开始依次编号 -## OwnRepoBranch:你想使用的分支清单,不指定分支(即使用默认分支)时可以用一对不包含内容的空引号"",编号必须和 OwnRepoUrl 对应。 -## OwnRepoPath:要使用的脚本在仓库哪个路径下,请输入仓库下的相对路径,默认空值""代表仓库根目录,编号必须和 OwnRepoUrl 对应,同一个仓库下不同文件夹之间使用空格分开。如果既包括根目录又包括子目录,填写请见示例中OwnRepoPath3。 +## RepoUrl:仓库地址清单,必须从1开始依次编号 +## RepoBranch:你想使用的分支清单,不指定分支(即使用默认分支)时可以用一对不包含内容的空引号"",编号必须和 OwnRepoUrl 对应。 +## RepoPath:要使用的脚本在仓库哪个路径下,请输入仓库下的相对路径,默认空值""代表仓库根目录,编号必须和 OwnRepoUrl 对应,同一个仓库下不同文件夹之间使用空格分开。如果既包括根目录又包括子目录,填写请见示例中OwnRepoPath3。 ## 所有脚本存放在 own 目录下,三个清单必须一一对应,示例如下: -## OwnRepoUrl1="https://gitee.com/abc/jdtsa.git" -## OwnRepoUrl2="https://github.com/nedcd/jxddfsa.git" -## OwnRepoUrl3="git@github.com:eject/poex.git" +## RepoUrl1="https://gitee.com/abc/jdtsa.git" +## RepoUrl2="https://github.com/nedcd/jxddfsa.git" +## RepoUrl3="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" 分支 +## RepoBranch1="" # 代表第1个仓库 https://gitee.com/abc/jdtsa.git 使用 "默认" 分支 +## RepoBranch2="main" # 代表第2个仓库 https://github.com/nedcd/jxddfsa.git 使用 "main" 分支 +## RepoBranch3="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 文件夹下,必须输入相对路径 +## RepoPath1="" # 代表第1个仓库https://gitee.com/abc/jdtsa.git,你想使用的脚本就在仓库根目录下。 +## RepoPath2="scripts/jd normal" # 代表第2个仓库https://github.com/nedcd/jxddfsa.git,你想使用的脚本在仓库的 scripts/jd 和 normal文件夹下,必须输入相对路径 +## RepoPath3="'' cron" # 代表第3个仓库git@github.com:eject/poex.git,你想使用的脚本在仓库的 根目录 和 cron 文件夹下,必须输入相对路径 RepoUrl1="" RepoUrl2="" @@ -78,11 +78,11 @@ RepoPath2="" ## 启用其他开发者的仓库方式二(选填):只下载想要的文件,针对同一个仓库,方式一和方式二只能选择一种。 ## 请先确认你能正常下载该raw文件才列在下方,无论是github还是gitee,请只填入 raw 文件链接。 ## 一行一个文件下载链接,首尾一对半角括号,示例: -## OwnRawFile=( +## RawUrl=( ## 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 ## ) -RawFile=( +RawUrl=( ) \ No newline at end of file diff --git a/shell/api.sh b/shell/api.sh index 4375c13f..6c8d1254 100644 --- a/shell/api.sh +++ b/shell/api.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash get_token() { - local authInfo=$(cat $AuthConf) - token=$(get_json_value "$authInfo" "token") + local auth_info=$(cat $file_auth_user) + token=$(get_json_value "$auth_info" "token") } get_json_value() { diff --git a/shell/task.sh b/shell/task.sh index 1bbbcce3..fc84bc82 100644 --- a/shell/task.sh +++ b/shell/task.sh @@ -91,7 +91,7 @@ gen_array_scripts () { ## 使用说明 usage () { define_cmd - echo -e "\ntask命令运行本程序自动添加进crontab的脚本,需要输入脚本的绝对路径或相对路径(定时任务中必须是绝对路径),用法为:" + echo -e "\ntask命令运行本程序自动添加进crontab的脚本,需要输入脚本的绝对路径或相对路径(定时任务中必须是从scripts目录出发的相对路径),用法为:" echo -e "1.$cmd_task # 依次执行,如果设置了随机延迟并且当时时间不在0-2、30-31、59分内,将随机延迟一定秒数" echo -e "2.$cmd_task now # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中" echo -e "3.$cmd_task conc # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中" @@ -111,6 +111,7 @@ run_nohup () { ## 正常运行单个脚本,$1:传入参数 run_normal () { local p1=$1 + cd $dir_scripts if [ -f $p1 ]; then import_config_and_check "$p1" update_crontab @@ -123,7 +124,7 @@ run_normal () { make_dir "$dir_log/$p1" $which_program $p1 2>&1 | tee $log_path else - echo -e "\n $p1 脚本不存在,请确认...\n" + echo -e "\n $dir_scripts/$p1 脚本不存在,请确认...\n" usage fi } @@ -132,6 +133,7 @@ run_normal () { ## 并发执行时,设定的 RandomDelay 不会生效,即所有任务立即执行 run_concurrent () { local p1=$1 + cd $dir_scripts if [ -f $p1 ]; then import_config_and_check "$p1" update_crontab @@ -149,7 +151,7 @@ run_concurrent () { $which_program $p1 &>$log_path & done else - echo -e "\n $p 脚本不存在,请确认...\n" + echo -e "\n $dir_scripts/$p1 脚本不存在,请确认...\n" usage fi } diff --git a/shell/update.sh b/shell/update.sh index ab9aba1c..d60a3c24 100644 --- a/shell/update.sh +++ b/shell/update.sh @@ -16,6 +16,7 @@ link_shell define_cmd fix_config import_config_no_check "update" +get_token ## 克隆脚本,$1:仓库地址,$2:仓库保存路径,$3:分支(可省略) git_clone_scripts () { @@ -28,17 +29,15 @@ git_clone_scripts () { exit_status=$? } -## 更新脚本,$1:仓库保存路径,$2:分支(可省略) +## 更新脚本,$1:仓库保存路径 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 $cmd_branch + git reset --hard git pull cd $dir_current } @@ -63,7 +62,7 @@ gen_list_own () { done fi done - grep -E "$cmd_task " $list_crontab_user | perl -pe "s|.*$cmd_task ([^\s]+)( .+\|$)|\1|" | sort -u > $list_own_user + grep -E "$cmd_task " $list_crontab_user | perl -pe "s|.* $cmd_task ([^\s]+)( .+\|$)|\1|" | sort -u > $list_own_user cd $dir_current } @@ -153,20 +152,24 @@ npm_install_2 () { cd $dir_current } +## 比对两个文件,$1比$2新时,将$1复制为$2 +diff_and_copy () { + local copy_source=$1 + local copy_to=$2 + if [ ! -s $copy_to ] || [[ $(diff $copy_source $copy_to) ]]; then + cp $copy_source $copy_to + fi +} + ## 更新依赖 update_depend () { + diff_and_copy "$dir_sample/package.json" "$dir_scripts/package.json" 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 + diff_and_copy "$dir_sample/sendNotify.js" "$dir_scripts/sendNotify.js" + diff_and_copy "$dir_sample/jdCookie.js" "$dir_scripts/jdCookie.js" } ## 输出是否有新的或失效的定时任务,$1:新的或失效的任务清单文件路径,$2:新/失效 @@ -209,19 +212,20 @@ add_cron () { 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}') - if [ -f $file_full_path ]; then + cd $dir_scripts + for file_relative_path in $detail; do + local file_name=$(echo $file_relative_path | awk -F "/" '{print $NF}') + if [ -f $file_relative_path ]; then cron_line=$( perl -ne "{ print if /.*([\d\*]*[\*-\/,\d]*[\d\*] ){4}[\d\*]*[\*-\/,\d]*[\d\*]( |,|\").*$file_name/ - }" $file_full_path | \ + }" $file_relative_path | \ perl -pe "{ - s|[^\d\*]*(([\d\*]*[\*-\/,\d]*[\d\*] ){4}[\d\*]*[\*-\/,\d]*[\d\*])( \|,\|\").*/?$file_name.*|\1:$cmd_task $file_full_path|g; + s|[^\d\*]*(([\d\*]*[\*-\/,\d]*[\d\*] ){4}[\d\*]*[\*-\/,\d]*[\d\*])( \|,\|\").*/?$file_name.*|\1:$cmd_task $file_relative_path|g; s| | |g }" | sort -u | head -1 ) - cron_name=$(grep "new Env" $file_full_path | awk -F "'|\"" '{print $2}' | head -1) + cron_name=$(grep "new Env" $file_relative_path | awk -F "'|\"" '{print $2}' | head -1) [[ -z $cron_name ]] && cron_name="$file_name" add_cron_api "$cron_line:$cron_name" fi @@ -251,13 +255,22 @@ update_own_repo () { else git_clone_scripts ${array_own_repo_url[i]} ${array_own_repo_path[i]} ${array_own_repo_branch[i]} fi - [[ $exit_status -eq 0 ]] && echo -e "\n更新${array_own_repo_path[i]}成功...\n" || echo -e "\n更新${array_own_repo_path[i]}失败,请检查原因...\n" + if [[ $exit_status -eq 0 ]]; then + echo -e "\n更新${array_own_repo_path[i]}成功...\n" + diff_and_copy "$dir_sample/sendNotify.js" "${array_own_repo_path[i]}/sendNotify.js" + diff_and_copy "$dir_sample/jdCookie.js" "${array_own_repo_path[i]}/jdCookie.js" + else + echo -e "\n更新${array_own_repo_path[i]}失败,请检查原因...\n" + fi done } ## 更新所有 raw 文件 update_own_raw () { - [[ ${#RawUrl[*]} -gt 0 ]] && echo -e "--------------------------------------------------------------\n" + if [[ ${#RawUrl[*]} -gt 0 ]]; then + echo -e "--------------------------------------------------------------\n" + make_dir $dir_raw + fi for ((i=0; i<${#RawUrl[*]}; i++)); do raw_file_name[$i]=$(echo ${RawUrl[i]} | awk -F "/" '{print $NF}') echo -e "开始下载:${RawUrl[i]} \n\n保存路径:$dir_raw/${raw_file_name[$i]}\n" @@ -288,13 +301,16 @@ run_extra_shell () { ## 脚本用法 usage () { echo -e "本脚本用法:" - echo -e "1. $cmd_update # 更新qinglong、所有你设置的仓库和raw文件,如果启用了EnableExtraShell还将在最后运行你自己编写的extra.sh" + echo -e "1. $cmd_update all # 更新qinglong、所有你设置的仓库和raw文件,如果启用了EnableExtraShell还将在最后运行你自己编写的extra.sh" echo -e "2. $cmd_update ql # 只更新qinglong,和输入 $cmd_update qinglong 时功能一样,不会运行extra.sh" - echo -e "3. $cmd_update # 指定scripts脚本目录下某个文件夹名称,只更新这个文件夹中的脚本,当该文件夹为git仓库才可使用此命令,不会运行extra.sh" + echo -e "3. $cmd_update raw # 只更新raw文件,不会运行extra.sh" + echo -e "4. $cmd_update repo # 更新所有设置的REPO,不会运行extra.sh" + echo -e "5. $cmd_update # 指定scripts脚本目录下某个文件夹名称,只更新这个文件夹中的脚本,当该文件夹已经存在并且是git仓库才可使用此命令,不会运行extra.sh" } ## 更新qinglong update_qinglong () { + echo -e "--------------------------------------------------------------\n" git_pull_scripts $dir_root if [[ $exit_status -eq 0 ]]; then echo -e "\n更新$dir_root成功...\n" @@ -313,7 +329,6 @@ update_all_scripts () { count_own_repo_sum gen_own_dir_and_path if [[ ${#array_own_scripts_path[*]} -gt 0 ]]; then - make_dir $dir_raw update_own_repo update_own_raw gen_list_own @@ -336,40 +351,52 @@ update_all_scripts () { update_specify_scripts_repo () { local tmp_dir=$1 if [ -d $dir_scripts/$tmp_dir ]; then - git_pull_scripts $dir_scripts/$tmp_dir + if [ -d $dir_scripts/$tmp_dir/.git ]; then + git_pull_scripts $dir_scripts/$tmp_dir + else + echo -e "$dir_scripts/$tmp_dir 不是一个git仓库...\n" + fi else - echo -e "$dir_scripts/$tmp_dir 不存在...\n" + echo -e "命令输入错误...\n" usage fi } main () { + local p1=$1 log_time=$(date "+%Y-%m-%d-%H-%M-%S") - log_path="$dir_log/update/${log_time}.log" + log_path="$dir_log/update/${log_time}_$p1.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 + if [[ $# -ne 1 ]]; then + echo -e "命令输入错误...\n" + usage + else + case $p1 in + all) + update_qinglong | tee $log_path + update_all_scripts | tee -a $log_path + run_extra_shell | tee -a $log_path + ;; + ql | qinglong) + update_qinglong | tee $log_path + ;; + repo) + count_own_repo_sum + gen_own_dir_and_path + update_own_repo | tee $log_path + ;; + raw) + count_own_repo_sum + gen_own_dir_and_path + update_own_raw | tee $log_path + ;; + *) + update_specify_scripts_repo "$p1" | tee $log_path + ;; + esac + fi } main "$@" + +exit 0 \ No newline at end of file