From 5530ce76e332ab7a44edef190ad3b6f698e5aa3e Mon Sep 17 00:00:00 2001 From: whyour Date: Thu, 29 Sep 2022 00:32:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=B3=BB=E7=BB=9F=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=B6=88=E8=80=97=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shell/api.sh | 320 ++++++++++---------- shell/bot.sh | 9 +- shell/pub.sh | 2 +- shell/rmlog.sh | 46 +-- shell/share.sh | 598 ++++++++++++++++++------------------ shell/task.sh | 563 +++++++++++++++++----------------- shell/update.sh | 787 ++++++++++++++++++++++++------------------------ 7 files changed, 1166 insertions(+), 1159 deletions(-) diff --git a/shell/api.sh b/shell/api.sh index 557ad8f1..57847c41 100755 --- a/shell/api.sh +++ b/shell/api.sh @@ -1,187 +1,187 @@ #!/usr/bin/env bash get_token() { - token=$(cat $file_auth_token | jq -r .value) + token=$(cat $file_auth_token | jq -r .value) } add_cron_api() { - local currentTimeStamp=$(date +%s) - if [[ $# -eq 1 ]]; then - local schedule=$(echo "$1" | awk -F ":" '{print $1}') - local command=$(echo "$1" | awk -F ":" '{print $2}') - local name=$(echo "$1" | awk -F ":" '{print $3}') - else - local schedule=$1 - local command=$2 - local name=$3 - fi + local currentTimeStamp=$(date +%s) + if [[ $# -eq 1 ]]; then + local schedule=$(echo "$1" | awk -F ":" '{print $1}') + local command=$(echo "$1" | awk -F ":" '{print $2}') + local name=$(echo "$1" | awk -F ":" '{print $3}') + else + local schedule=$1 + local command=$2 + local name=$3 + fi - local api=$( - curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ - -H "Accept: application/json" \ - -H "Authorization: Bearer $token" \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ - -H "Content-Type: application/json;charset=UTF-8" \ - -H "Origin: http://0.0.0.0:5700" \ - -H "Referer: http://0.0.0.0:5700/crontab" \ - -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ - --data-raw "{\"name\":\"$name\",\"command\":\"$command\",\"schedule\":\"$schedule\"}" \ - --compressed - ) - code=$(echo $api | jq -r .code) - message=$(echo $api | jq -r .message) - if [[ $code == 200 ]]; then - echo -e "$name -> 添加成功" - else - echo -e "$name -> 添加失败(${message})" - fi + local api=$( + curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ + -H "Accept: application/json" \ + -H "Authorization: Bearer $token" \ + -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ + -H "Content-Type: application/json;charset=UTF-8" \ + -H "Origin: http://0.0.0.0:5700" \ + -H "Referer: http://0.0.0.0:5700/crontab" \ + -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ + --data-raw "{\"name\":\"$name\",\"command\":\"$command\",\"schedule\":\"$schedule\"}" \ + --compressed + ) + code=$(echo $api | jq -r .code) + message=$(echo $api | jq -r .message) + if [[ $code == 200 ]]; then + echo -e "$name -> 添加成功" + else + echo -e "$name -> 添加失败(${message})" + fi } update_cron_api() { - local currentTimeStamp=$(date +%s) - if [[ $# -eq 1 ]]; then - local schedule=$(echo "$1" | awk -F ":" '{print $1}') - local command=$(echo "$1" | awk -F ":" '{print $2}') - local name=$(echo "$1" | awk -F ":" '{print $3}') - local id=$(echo "$1" | awk -F ":" '{print $4}') - else - local schedule=$1 - local command=$2 - local name=$3 - local id=$4 - fi + local currentTimeStamp=$(date +%s) + if [[ $# -eq 1 ]]; then + local schedule=$(echo "$1" | awk -F ":" '{print $1}') + local command=$(echo "$1" | awk -F ":" '{print $2}') + local name=$(echo "$1" | awk -F ":" '{print $3}') + local id=$(echo "$1" | awk -F ":" '{print $4}') + else + local schedule=$1 + local command=$2 + local name=$3 + local id=$4 + fi - local api=$( - curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ - -X 'PUT' \ - -H "Accept: application/json" \ - -H "Authorization: Bearer $token" \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ - -H "Content-Type: application/json;charset=UTF-8" \ - -H "Origin: http://0.0.0.0:5700" \ - -H "Referer: http://0.0.0.0:5700/crontab" \ - -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ - --data-raw "{\"name\":\"$name\",\"command\":\"$command\",\"schedule\":\"$schedule\",\"id\":\"$id\"}" \ - --compressed - ) - code=$(echo $api | jq -r .code) - message=$(echo $api | jq -r .message) - if [[ $code == 200 ]]; then - echo -e "$name -> 更新成功" - else - echo -e "$name -> 更新失败(${message})" - fi + local api=$( + curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ + -X 'PUT' \ + -H "Accept: application/json" \ + -H "Authorization: Bearer $token" \ + -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ + -H "Content-Type: application/json;charset=UTF-8" \ + -H "Origin: http://0.0.0.0:5700" \ + -H "Referer: http://0.0.0.0:5700/crontab" \ + -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ + --data-raw "{\"name\":\"$name\",\"command\":\"$command\",\"schedule\":\"$schedule\",\"id\":\"$id\"}" \ + --compressed + ) + code=$(echo $api | jq -r .code) + message=$(echo $api | jq -r .message) + if [[ $code == 200 ]]; then + echo -e "$name -> 更新成功" + else + echo -e "$name -> 更新失败(${message})" + fi } update_cron_command_api() { - local currentTimeStamp=$(date +%s) - if [[ $# -eq 1 ]]; then - local command=$(echo "$1" | awk -F ":" '{print $1}') - local id=$(echo "$1" | awk -F ":" '{print $2}') - else - local command=$1 - local id=$2 - fi + local currentTimeStamp=$(date +%s) + if [[ $# -eq 1 ]]; then + local command=$(echo "$1" | awk -F ":" '{print $1}') + local id=$(echo "$1" | awk -F ":" '{print $2}') + else + local command=$1 + local id=$2 + fi - local api=$( - curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ - -X 'PUT' \ - -H "Accept: application/json" \ - -H "Authorization: Bearer $token" \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ - -H "Content-Type: application/json;charset=UTF-8" \ - -H "Origin: http://0.0.0.0:5700" \ - -H "Referer: http://0.0.0.0:5700/crontab" \ - -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ - --data-raw "{\"command\":\"$command\",\"id\":\"$id\"}" \ - --compressed - ) - code=$(echo $api | jq -r .code) - message=$(echo $api | jq -r .message) - if [[ $code == 200 ]]; then - echo -e "$command -> 更新成功" - else - echo -e "$command -> 更新失败(${message})" - fi + local api=$( + curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ + -X 'PUT' \ + -H "Accept: application/json" \ + -H "Authorization: Bearer $token" \ + -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ + -H "Content-Type: application/json;charset=UTF-8" \ + -H "Origin: http://0.0.0.0:5700" \ + -H "Referer: http://0.0.0.0:5700/crontab" \ + -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ + --data-raw "{\"command\":\"$command\",\"id\":\"$id\"}" \ + --compressed + ) + code=$(echo $api | jq -r .code) + message=$(echo $api | jq -r .message) + if [[ $code == 200 ]]; then + echo -e "$command -> 更新成功" + else + echo -e "$command -> 更新失败(${message})" + fi } del_cron_api() { - local ids=$1 - local currentTimeStamp=$(date +%s) - local api=$( - curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ - -X 'DELETE' \ - -H "Accept: application/json" \ - -H "Authorization: Bearer $token" \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ - -H "Content-Type: application/json;charset=UTF-8" \ - -H "Origin: http://0.0.0.0:5700" \ - -H "Referer: http://0.0.0.0:5700/crontab" \ - -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ - --data-raw "[$ids]" \ - --compressed - ) - code=$(echo $api | jq -r .code) - message=$(echo $api | jq -r .message) - if [[ $code == 200 ]]; then - echo -e "成功" - else - echo -e "失败(${message})" - fi + local ids=$1 + local currentTimeStamp=$(date +%s) + local api=$( + curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons?t=$currentTimeStamp" \ + -X 'DELETE' \ + -H "Accept: application/json" \ + -H "Authorization: Bearer $token" \ + -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ + -H "Content-Type: application/json;charset=UTF-8" \ + -H "Origin: http://0.0.0.0:5700" \ + -H "Referer: http://0.0.0.0:5700/crontab" \ + -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ + --data-raw "[$ids]" \ + --compressed + ) + code=$(echo $api | jq -r .code) + message=$(echo $api | jq -r .message) + if [[ $code == 200 ]]; then + echo -e "成功" + else + echo -e "失败(${message})" + fi } update_cron() { - local ids="$1" - local status="$2" - local pid="${3:-''}" - local logPath="$4" - local lastExecutingTime="${5:-0}" - local runningTime="${6:-0}" - local currentTimeStamp=$(date +%s) - local api=$( - curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons/status?t=$currentTimeStamp" \ - -X 'PUT' \ - -H "Accept: application/json" \ - -H "Authorization: Bearer $token" \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ - -H "Content-Type: application/json;charset=UTF-8" \ - -H "Origin: http://0.0.0.0:5700" \ - -H "Referer: http://0.0.0.0:5700/crontab" \ - -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ - --data-raw "{\"ids\":[$ids],\"status\":\"$status\",\"pid\":\"$pid\",\"log_path\":\"$logPath\",\"last_execution_time\":$lastExecutingTime,\"last_running_time\":$runningTime}" \ - --compressed - ) - code=$(echo $api | jq -r .code) - message=$(echo $api | jq -r .message) - if [[ $code != 200 ]]; then - echo -e "\n## 更新任务状态失败(${message})\n" >> $dir_log/$log_path - fi + local ids="$1" + local status="$2" + local pid="${3:-''}" + local logPath="$4" + local lastExecutingTime="${5:-0}" + local runningTime="${6:-0}" + local currentTimeStamp=$(date +%s) + local api=$( + curl -s --noproxy "*" "http://0.0.0.0:5600/open/crons/status?t=$currentTimeStamp" \ + -X 'PUT' \ + -H "Accept: application/json" \ + -H "Authorization: Bearer $token" \ + -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ + -H "Content-Type: application/json;charset=UTF-8" \ + -H "Origin: http://0.0.0.0:5700" \ + -H "Referer: http://0.0.0.0:5700/crontab" \ + -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ + --data-raw "{\"ids\":[$ids],\"status\":\"$status\",\"pid\":\"$pid\",\"log_path\":\"$logPath\",\"last_execution_time\":$lastExecutingTime,\"last_running_time\":$runningTime}" \ + --compressed + ) + code=$(echo $api | jq -r .code) + message=$(echo $api | jq -r .message) + if [[ $code != 200 ]]; then + echo -e "\n## 更新任务状态失败(${message})\n" >>$dir_log/$log_path + fi } notify_api() { - local title=$1 - local content=$2 - local currentTimeStamp=$(date +%s) - local api=$( - curl -s --noproxy "*" "http://0.0.0.0:5600/open/system/notify?t=$currentTimeStamp" \ - -X 'PUT' \ - -H "Accept: application/json" \ - -H "Authorization: Bearer $token" \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ - -H "Content-Type: application/json;charset=UTF-8" \ - -H "Origin: http://0.0.0.0:5700" \ - -H "Referer: http://0.0.0.0:5700/crontab" \ - -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ - --data-raw "{\"title\":\"$title\",\"content\":\"$content\"}" \ - --compressed - ) - code=$(echo $api | jq -r .code) - message=$(echo $api | jq -r .message) - if [[ $code == 200 ]]; then - echo -e "通知发送成功" - else - echo -e "通知失败(${message})" - fi + local title=$1 + local content=$2 + local currentTimeStamp=$(date +%s) + local api=$( + curl -s --noproxy "*" "http://0.0.0.0:5600/open/system/notify?t=$currentTimeStamp" \ + -X 'PUT' \ + -H "Accept: application/json" \ + -H "Authorization: Bearer $token" \ + -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" \ + -H "Content-Type: application/json;charset=UTF-8" \ + -H "Origin: http://0.0.0.0:5700" \ + -H "Referer: http://0.0.0.0:5700/crontab" \ + -H "Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7" \ + --data-raw "{\"title\":\"$title\",\"content\":\"$content\"}" \ + --compressed + ) + code=$(echo $api | jq -r .code) + message=$(echo $api | jq -r .message) + if [[ $code == 200 ]]; then + echo -e "通知发送成功" + else + echo -e "通知失败(${message})" + fi } get_token diff --git a/shell/bot.sh b/shell/bot.sh index 808b009a..f9887ab2 100644 --- a/shell/bot.sh +++ b/shell/bot.sh @@ -35,11 +35,10 @@ fi cp -f "$repo_path/jbot/requirements.txt" "$dir_data" cd $dir_data -cat requirements.txt | while read LREAD -do -if [[ ! $(pip3 show "${LREAD%%=*}" 2>/dev/null) ]]; then - pip3 --default-timeout=100 install ${LREAD} -fi +cat requirements.txt | while read LREAD; do + if [[ ! $(pip3 show "${LREAD%%=*}" 2>/dev/null) ]]; then + pip3 --default-timeout=100 install ${LREAD} + fi done echo -e "\npython3依赖安装成功...\n" diff --git a/shell/pub.sh b/shell/pub.sh index 4ca7c7c2..3a6b21bc 100644 --- a/shell/pub.sh +++ b/shell/pub.sh @@ -29,4 +29,4 @@ git tag -a "$version" -m "release $version" echo -e "提交tag" git push --tags -echo -e "完成发布" \ No newline at end of file +echo -e "完成发布" diff --git a/shell/rmlog.sh b/shell/rmlog.sh index 0e010520..bebdaf23 100755 --- a/shell/rmlog.sh +++ b/shell/rmlog.sh @@ -8,35 +8,35 @@ days=$1 ## 删除运行js脚本的旧日志 remove_js_log() { - local log_full_path_list=$(find $dir_log/ -name "*.log") - local diff_time - for log in $log_full_path_list; do - local log_date=$(echo $log | awk -F "/" '{print $NF}' | cut -c1-10) #文件名比文件属性获得的日期要可靠 - if [[ $(date +%s -d $log_date 2>/dev/null) ]]; then - if [[ $is_macos -eq 1 ]]; then - diff_time=$(($(date +%s) - $(date -j -f "%Y-%m-%d" "$log_date" +%s))) - else - diff_time=$(($(date +%s) - $(date +%s -d "$log_date"))) - fi - [[ $diff_time -gt $((${days} * 86400)) ]] && rm -vf $log - fi - done + local log_full_path_list=$(find $dir_log/ -name "*.log") + local diff_time + for log in $log_full_path_list; do + local log_date=$(echo $log | awk -F "/" '{print $NF}' | cut -c1-10) #文件名比文件属性获得的日期要可靠 + if [[ $(date +%s -d $log_date 2>/dev/null) ]]; then + if [[ $is_macos -eq 1 ]]; then + diff_time=$(($(date +%s) - $(date -j -f "%Y-%m-%d" "$log_date" +%s))) + else + diff_time=$(($(date +%s) - $(date +%s -d "$log_date"))) + fi + [[ $diff_time -gt $((${days} * 86400)) ]] && rm -vf $log + fi + done } ## 删除空文件夹 remove_empty_dir() { - cd $dir_log - for dir in $(ls); do - if [[ -d $dir ]] && [[ -z $(ls $dir) ]]; then - rm -rf $dir - fi - done + cd $dir_log + for dir in $(ls); do + if [[ -d $dir ]] && [[ -z $(ls $dir) ]]; then + rm -rf $dir + fi + done } ## 运行 if [[ ${days} ]]; then - echo -e "查找旧日志文件中...\n" - remove_js_log - remove_empty_dir - echo -e "删除旧日志执行完毕\n" + echo -e "查找旧日志文件中...\n" + remove_js_log + remove_empty_dir + echo -e "删除旧日志执行完毕\n" fi diff --git a/shell/share.sh b/shell/share.sh index 7e4b367f..e53c14fa 100755 --- a/shell/share.sh +++ b/shell/share.sh @@ -50,430 +50,434 @@ list_own_drop=$dir_list_tmp/own_drop.list ## 软连接及其原始文件对应关系 link_name=( - task - ql + task + ql ) original_name=( - task.sh - update.sh + task.sh + update.sh ) init_env() { - export NODE_PATH=/usr/local/bin:/usr/local/pnpm-global/5/node_modules:/usr/local/lib/node_modules:/root/.local/share/pnpm/global/5/node_modules - export PYTHONUNBUFFERED=1 + export NODE_PATH=/usr/local/bin:/usr/local/pnpm-global/5/node_modules:/usr/local/lib/node_modules:/root/.local/share/pnpm/global/5/node_modules + export PYTHONUNBUFFERED=1 } import_config() { - [[ -f $file_config_user ]] && . $file_config_user - [[ -f $file_env ]] && . $file_env + [[ -f $file_config_user ]] && . $file_config_user + [[ -f $file_env ]] && . $file_env - ql_base_url=${QlBaseUrl:-""} - command_timeout_time=${CommandTimeoutTime:-"1h"} - proxy_url=${ProxyUrl:-""} - file_extensions=${RepoFileExtensions:-"js py"} - current_branch=${QL_BRANCH} + ql_base_url=${QlBaseUrl:-""} + command_timeout_time=${CommandTimeoutTime:-"1h"} + proxy_url=${ProxyUrl:-""} + file_extensions=${RepoFileExtensions:-"js py"} + current_branch=${QL_BRANCH} - if [[ -n "${DefaultCronRule}" ]]; then - default_cron="${DefaultCronRule}" - else - default_cron="$(random_range 0 59) $(random_range 0 23) * * *" - fi + if [[ -n "${DefaultCronRule}" ]]; then + default_cron="${DefaultCronRule}" + else + default_cron="$(random_range 0 59) $(random_range 0 23) * * *" + fi + + cpu_warn=${CpuWarn:-80} + mem_warn=${MemoryWarn:-80} + disk_warn=${DiskWarn:-90} } set_proxy() { - if [[ $proxy_url ]]; then - export http_proxy="${proxy_url}" - export https_proxy="${proxy_url}" - fi + if [[ $proxy_url ]]; then + export http_proxy="${proxy_url}" + export https_proxy="${proxy_url}" + fi } unset_proxy() { - unset http_proxy - unset https_proxy + unset http_proxy + unset https_proxy } make_dir() { - local dir=$1 - if [[ ! -d $dir ]]; then - mkdir -p $dir - fi + local dir=$1 + if [[ ! -d $dir ]]; then + mkdir -p $dir + fi } detect_termux() { - if [[ $PATH == *com.termux* ]]; then - is_termux=1 - else - is_termux=0 - fi + if [[ $PATH == *com.termux* ]]; then + is_termux=1 + else + is_termux=0 + fi } detect_macos() { - [[ $(uname -s) == Darwin ]] && is_macos=1 || is_macos=0 + [[ $(uname -s) == Darwin ]] && is_macos=1 || is_macos=0 } gen_random_num() { - local divi=$1 - echo $((${RANDOM} % $divi)) + local divi=$1 + echo $((${RANDOM} % $divi)) } link_shell_sub() { - local link_path="$1" - local original_path="$2" - if [[ ! -L $link_path ]] || [[ $(readlink -f $link_path) != $original_path ]]; then - rm -f $link_path 2>/dev/null - ln -sf $original_path $link_path - fi + local link_path="$1" + local original_path="$2" + if [[ ! -L $link_path ]] || [[ $(readlink -f $link_path) != $original_path ]]; then + rm -f $link_path 2>/dev/null + ln -sf $original_path $link_path + fi } link_shell() { - if [[ $is_termux -eq 1 ]]; then - local path="/data/data/com.termux/files/usr/bin/" - elif [[ $PATH == */usr/local/bin* ]] && [[ -d /usr/local/bin ]]; then - local path="/usr/local/bin/" - else - local path="" - echo -e "脚本功能受限,请自行添加命令的软连接...\n" - fi - if [[ $path ]]; then - for ((i = 0; i < ${#link_name[*]}; i++)); do - link_shell_sub "$path${link_name[i]}" "$dir_shell/${original_name[i]}" - done - fi + if [[ $is_termux -eq 1 ]]; then + local path="/data/data/com.termux/files/usr/bin/" + elif [[ $PATH == */usr/local/bin* ]] && [[ -d /usr/local/bin ]]; then + local path="/usr/local/bin/" + else + local path="" + echo -e "脚本功能受限,请自行添加命令的软连接...\n" + fi + if [[ $path ]]; then + for ((i = 0; i < ${#link_name[*]}; i++)); do + link_shell_sub "$path${link_name[i]}" "$dir_shell/${original_name[i]}" + done + fi } define_cmd() { - local cmd_prefix cmd_suffix - if type task &>/dev/null; then - cmd_suffix="" - if [[ -f "$dir_shell/task.sh" ]]; then - cmd_prefix="" - else - cmd_prefix="bash " - fi + local cmd_prefix cmd_suffix + if type task &>/dev/null; then + cmd_suffix="" + if [[ -f "$dir_shell/task.sh" ]]; then + cmd_prefix="" else - cmd_suffix=".sh" - if [[ -f "$dir_shell/task.sh" ]]; then - cmd_prefix="$dir_shell/" - else - cmd_prefix="bash $dir_shell/" - fi + cmd_prefix="bash " fi - for ((i = 0; i < ${#link_name[*]}; i++)); do - export cmd_${link_name[i]}="${cmd_prefix}${link_name[i]}${cmd_suffix}" - done + else + cmd_suffix=".sh" + if [[ -f "$dir_shell/task.sh" ]]; then + cmd_prefix="$dir_shell/" + else + cmd_prefix="bash $dir_shell/" + fi + fi + for ((i = 0; i < ${#link_name[*]}; i++)); do + export cmd_${link_name[i]}="${cmd_prefix}${link_name[i]}${cmd_suffix}" + done } fix_config() { - make_dir $dir_static - make_dir $dir_data - make_dir $dir_config - make_dir $dir_log - make_dir $dir_db - make_dir $dir_scripts - make_dir $dir_list_tmp - make_dir $dir_repo - make_dir $dir_raw - make_dir $dir_update_log - make_dir $dir_dep + make_dir $dir_static + make_dir $dir_data + make_dir $dir_config + make_dir $dir_log + make_dir $dir_db + make_dir $dir_scripts + make_dir $dir_list_tmp + make_dir $dir_repo + make_dir $dir_raw + make_dir $dir_update_log + make_dir $dir_dep - if [[ ! -s $file_config_user ]]; then - echo -e "复制一份 $file_config_sample 为 $file_config_user,随后请按注释编辑你的配置文件:$file_config_user\n" - cp -fv $file_config_sample $file_config_user - echo - fi + if [[ ! -s $file_config_user ]]; then + echo -e "复制一份 $file_config_sample 为 $file_config_user,随后请按注释编辑你的配置文件:$file_config_user\n" + cp -fv $file_config_sample $file_config_user + echo + fi - if [[ ! -f $file_env ]]; then - echo -e "检测到config配置目录下不存在env.sh,创建一个空文件用于初始化...\n" - touch $file_env - echo - fi + if [[ ! -f $file_env ]]; then + echo -e "检测到config配置目录下不存在env.sh,创建一个空文件用于初始化...\n" + touch $file_env + echo + fi - if [[ ! -f $file_task_before ]]; then - echo -e "复制一份 $file_task_sample 为 $file_task_before\n" - cp -fv $file_task_sample $file_task_before - echo - fi + if [[ ! -f $file_task_before ]]; then + echo -e "复制一份 $file_task_sample 为 $file_task_before\n" + cp -fv $file_task_sample $file_task_before + echo + fi - if [[ ! -f $file_task_after ]]; then - echo -e "复制一份 $file_task_sample 为 $file_task_after\n" - cp -fv $file_task_sample $file_task_after - echo - fi + if [[ ! -f $file_task_after ]]; then + echo -e "复制一份 $file_task_sample 为 $file_task_after\n" + cp -fv $file_task_sample $file_task_after + echo + fi - if [[ ! -f $file_extra_shell ]]; then - echo -e "复制一份 $file_extra_sample 为 $file_extra_shell\n" - cp -fv $file_extra_sample $file_extra_shell - echo - fi + if [[ ! -f $file_extra_shell ]]; then + echo -e "复制一份 $file_extra_sample 为 $file_extra_shell\n" + cp -fv $file_extra_sample $file_extra_shell + echo + fi - if [[ ! -s $file_auth_user ]]; then - echo -e "复制一份 $file_auth_sample 为 $file_auth_user\n" - cp -fv $file_auth_sample $file_auth_user - echo - fi + if [[ ! -s $file_auth_user ]]; then + echo -e "复制一份 $file_auth_sample 为 $file_auth_user\n" + cp -fv $file_auth_sample $file_auth_user + echo + fi - if [[ ! -s $file_notify_py ]]; then - echo -e "复制一份 $file_notify_py_sample 为 $file_notify_py\n" - cp -fv $file_notify_py_sample $file_notify_py - echo - fi + if [[ ! -s $file_notify_py ]]; then + echo -e "复制一份 $file_notify_py_sample 为 $file_notify_py\n" + cp -fv $file_notify_py_sample $file_notify_py + echo + fi - if [[ ! -s $file_notify_js ]]; then - echo -e "复制一份 $file_notify_js_sample 为 $file_notify_js\n" - cp -fv $file_notify_js_sample $file_notify_js - echo - fi + if [[ ! -s $file_notify_js ]]; then + echo -e "复制一份 $file_notify_js_sample 为 $file_notify_js\n" + cp -fv $file_notify_js_sample $file_notify_js + echo + fi - if [[ -s /etc/nginx/conf.d/default.conf ]]; then - echo -e "检测到默认nginx配置文件,清空...\n" - cat /dev/null >/etc/nginx/conf.d/default.conf - echo - fi + if [[ -s /etc/nginx/conf.d/default.conf ]]; then + echo -e "检测到默认nginx配置文件,清空...\n" + cat /dev/null >/etc/nginx/conf.d/default.conf + echo + fi - if [[ ! -s $dep_notify_js ]]; then - echo -e "复制一份 $file_notify_js_sample 为 $dep_notify_js\n" - cp -fv $file_notify_js_sample $dep_notify_js - echo - fi + if [[ ! -s $dep_notify_js ]]; then + echo -e "复制一份 $file_notify_js_sample 为 $dep_notify_js\n" + cp -fv $file_notify_js_sample $dep_notify_js + echo + fi - if [[ ! -s $dep_notify_py ]]; then - echo -e "复制一份 $file_notify_py_sample 为 $dep_notify_py\n" - cp -fv $file_notify_py_sample $dep_notify_py - echo - fi + if [[ ! -s $dep_notify_py ]]; then + echo -e "复制一份 $file_notify_py_sample 为 $dep_notify_py\n" + cp -fv $file_notify_py_sample $dep_notify_py + echo + fi } npm_install_sub() { - if [ $is_termux -eq 1 ]; then - npm install --production --no-bin-links - elif ! type pnpm &>/dev/null; then - npm install --production - else - pnpm install --loglevel error --production - fi + if [ $is_termux -eq 1 ]; then + npm install --production --no-bin-links + elif ! type pnpm &>/dev/null; then + npm install --production + else + pnpm install --loglevel error --production + fi } npm_install_1() { - local dir_current=$(pwd) - local dir_work=$1 + local dir_current=$(pwd) + local dir_work=$1 - cd $dir_work - echo -e "运行 npm install...\n" - npm_install_sub - [[ $? -ne 0 ]] && echo -e "\nnpm install 运行不成功,请进入 $dir_work 目录后手动运行 npm install...\n" - cd $dir_current + cd $dir_work + echo -e "运行 npm install...\n" + npm_install_sub + [[ $? -ne 0 ]] && echo -e "\nnpm install 运行不成功,请进入 $dir_work 目录后手动运行 npm install...\n" + cd $dir_current } npm_install_2() { - local dir_current=$(pwd) - local dir_work=$1 + local dir_current=$(pwd) + local dir_work=$1 - cd $dir_work - echo -e "检测到 $dir_work 的依赖包有变化,运行 npm install...\n" - npm_install_sub - if [[ $? -ne 0 ]]; then - echo -e "\n安装 $dir_work 的依赖包运行不成功,再次尝试一遍...\n" - npm_install_1 $dir_work - fi - cd $dir_current + cd $dir_work + echo -e "检测到 $dir_work 的依赖包有变化,运行 npm install...\n" + npm_install_sub + if [[ $? -ne 0 ]]; then + echo -e "\n安装 $dir_work 的依赖包运行不成功,再次尝试一遍...\n" + npm_install_1 $dir_work + fi + cd $dir_current } diff_and_copy() { - local copy_source=$1 - local copy_to=$2 - if [[ ! -s $copy_to ]] || [[ $(diff $copy_source $copy_to) ]]; then - cp -f $copy_source $copy_to - fi + local copy_source=$1 + local copy_to=$2 + if [[ ! -s $copy_to ]] || [[ $(diff $copy_source $copy_to) ]]; then + cp -f $copy_source $copy_to + fi } update_depend() { - local dir_current=$(pwd) + local dir_current=$(pwd) - 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/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 - cd $dir_current + cd $dir_current } git_clone_scripts() { - local url=$1 - local dir=$2 - local branch=$3 - [[ $branch ]] && local part_cmd="-b $branch " - echo -e "开始克隆仓库 $url 到 $dir\n" + local url=$1 + local dir=$2 + local branch=$3 + [[ $branch ]] && local part_cmd="-b $branch " + echo -e "开始克隆仓库 $url 到 $dir\n" - set_proxy - git clone $part_cmd $url $dir - exit_status=$? - unset_proxy + set_proxy + git clone $part_cmd $url $dir + exit_status=$? + unset_proxy } git_pull_scripts() { - local dir_current=$(pwd) - local dir_work="$1" - local branch="$2" - cd $dir_work - echo -e "开始更新仓库:$dir_work\n" + local dir_current=$(pwd) + local dir_work="$1" + local branch="$2" + cd $dir_work + echo -e "开始更新仓库:$dir_work\n" - set_proxy - git fetch --all - exit_status=$? - git pull &>/dev/null - unset_proxy - reset_branch "$branch" + set_proxy + git fetch --all + exit_status=$? + git pull &>/dev/null + unset_proxy + reset_branch "$branch" - cd $dir_current + cd $dir_current } reset_romote_url() { - local dir_current=$(pwd) - local dir_work=$1 - local url=$2 - local branch="$3" + local dir_current=$(pwd) + local dir_work=$1 + local url=$2 + local branch="$3" - if [[ -d "$dir_work/.git" ]]; then - cd $dir_work - [[ -f ".git/index.lock" ]] && rm -f .git/index.lock >/dev/null - git remote set-url origin $url &>/dev/null + if [[ -d "$dir_work/.git" ]]; then + cd $dir_work + [[ -f ".git/index.lock" ]] && rm -f .git/index.lock >/dev/null + git remote set-url origin $url &>/dev/null - local part_cmd="" - reset_branch "$branch" - cd $dir_current - fi + local part_cmd="" + reset_branch "$branch" + cd $dir_current + fi } reset_branch() { - local branch="$1" - if [[ $branch ]]; then - part_cmd="origin/${branch}" - git checkout -B "$branch" &>/dev/null - git branch --set-upstream-to=$part_cmd $branch &>/dev/null - fi - git reset --hard $part_cmd &>/dev/null + local branch="$1" + if [[ $branch ]]; then + part_cmd="origin/${branch}" + git checkout -B "$branch" &>/dev/null + git branch --set-upstream-to=$part_cmd $branch &>/dev/null + fi + git reset --hard $part_cmd &>/dev/null } random_range() { - local beg=$1 - local end=$2 - echo $((RANDOM % ($end - $beg) + $beg)) + local beg=$1 + local end=$2 + echo $((RANDOM % ($end - $beg) + $beg)) } reload_pm2() { - pm2 l &>/dev/null + pm2 l &>/dev/null - echo -e "启动面板服务\n" - pm2 delete panel --source-map-support --time &>/dev/null - pm2 start $dir_static/build/app.js -n panel --source-map-support --time &>/dev/null + echo -e "启动面板服务\n" + pm2 delete panel --source-map-support --time &>/dev/null + pm2 start $dir_static/build/app.js -n panel --source-map-support --time &>/dev/null - echo -e "启动定时任务服务\n" - pm2 delete schedule --source-map-support --time &>/dev/null - pm2 start $dir_static/build/schedule.js -n schedule --source-map-support --time &>/dev/null + echo -e "启动定时任务服务\n" + pm2 delete schedule --source-map-support --time &>/dev/null + pm2 start $dir_static/build/schedule.js -n schedule --source-map-support --time &>/dev/null - echo -e "启动公开服务\n" - pm2 delete public --source-map-support --time &>/dev/null - pm2 start $dir_static/build/public.js -n public --source-map-support --time &>/dev/null + echo -e "启动公开服务\n" + pm2 delete public --source-map-support --time &>/dev/null + pm2 start $dir_static/build/public.js -n public --source-map-support --time &>/dev/null } diff_time() { - local format="$1" - local begin_time="$2" - local end_time="$3" + local format="$1" + local begin_time="$2" + local end_time="$3" - if [[ $is_macos -eq 1 ]]; then - diff_time=$(($(date -j -f "$format" "$end_time" +%s) - $(date -j -f "$format" "$begin_time" +%s))) - else - diff_time=$(($(date +%s -d "$end_time") - $(date +%s -d "$begin_time"))) - fi - echo "$diff_time" + if [[ $is_macos -eq 1 ]]; then + diff_time=$(($(date -j -f "$format" "$end_time" +%s) - $(date -j -f "$format" "$begin_time" +%s))) + else + diff_time=$(($(date +%s -d "$end_time") - $(date +%s -d "$begin_time"))) + fi + echo "$diff_time" } format_time() { - local format="$1" - local time="$2" + local format="$1" + local time="$2" - if [[ $is_macos -eq 1 ]]; then - echo $(date -j -f "$format" "$time" "+%Y-%m-%d %H:%M:%S") - else - echo $(date -d "$time" "+%Y-%m-%d %H:%M:%S") - fi + if [[ $is_macos -eq 1 ]]; then + echo $(date -j -f "$format" "$time" "+%Y-%m-%d %H:%M:%S") + else + echo $(date -d "$time" "+%Y-%m-%d %H:%M:%S") + fi } format_log_time() { - local format="$1" - local time="$2" + local format="$1" + local time="$2" - if [[ $is_macos -eq 1 ]]; then - echo $(date -j -f "$format" "$time" "+%Y-%m-%d-%H-%M-%S") - else - echo $(date -d "$time" "+%Y-%m-%d-%H-%M-%S") - fi + if [[ $is_macos -eq 1 ]]; then + echo $(date -j -f "$format" "$time" "+%Y-%m-%d-%H-%M-%S") + else + echo $(date -d "$time" "+%Y-%m-%d-%H-%M-%S") + fi } format_timestamp() { - local format="$1" - local time="$2" + local format="$1" + local time="$2" - if [[ $is_macos -eq 1 ]]; then - echo $(date -j -f "$format" "$time" "+%s") - else - echo $(date -d "$time" "+%s") - fi + if [[ $is_macos -eq 1 ]]; then + echo $(date -j -f "$format" "$time" "+%s") + else + echo $(date -d "$time" "+%s") + fi } patch_version() { - if [[ $PipMirror ]]; then - pip3 config set global.index-url $PipMirror - fi - if [[ $NpmMirror ]]; then - npm config set registry $NpmMirror - fi + if [[ $PipMirror ]]; then + pip3 config set global.index-url $PipMirror + fi + if [[ $NpmMirror ]]; then + npm config set registry $NpmMirror + fi - # 兼容pnpm@7 - pnpm setup &>/dev/null - source ~/.bashrc - pnpm install -g &>/dev/null + # 兼容pnpm@7 + pnpm setup &>/dev/null + source ~/.bashrc + pnpm install -g &>/dev/null - if [[ -f "$dir_root/db/cookie.db" ]]; then - echo -e "检测到旧的db文件,拷贝为新db...\n" - mv $dir_root/db/cookie.db $dir_root/db/env.db - rm -rf $dir_root/db/cookie.db - echo - fi + if [[ -f "$dir_root/db/cookie.db" ]]; then + echo -e "检测到旧的db文件,拷贝为新db...\n" + mv $dir_root/db/cookie.db $dir_root/db/env.db + rm -rf $dir_root/db/cookie.db + echo + fi - if ! type ts-node &>/dev/null; then - pnpm add -g ts-node typescript tslib - fi + if ! type ts-node &>/dev/null; then + pnpm add -g ts-node typescript tslib + fi - git config --global pull.rebase false + git config --global pull.rebase false - cp -f $dir_root/.env.example $dir_root/.env + cp -f $dir_root/.env.example $dir_root/.env - if [[ -d "$dir_root/db" ]]; then - echo -e "检测到旧的db目录,拷贝到data目录...\n" - cp -rf $dir_root/config $dir_root/data - echo - fi + if [[ -d "$dir_root/db" ]]; then + echo -e "检测到旧的db目录,拷贝到data目录...\n" + cp -rf $dir_root/config $dir_root/data + echo + fi - if [[ -d "$dir_root/scripts" ]]; then - echo -e "检测到旧的scripts目录,拷贝到data目录...\n" - cp -rf $dir_root/scripts $dir_root/data - echo - fi + if [[ -d "$dir_root/scripts" ]]; then + echo -e "检测到旧的scripts目录,拷贝到data目录...\n" + cp -rf $dir_root/scripts $dir_root/data + echo + fi - if [[ -d "$dir_root/log" ]]; then - echo -e "检测到旧的log目录,拷贝到data目录...\n" - cp -rf $dir_root/log $dir_root/data - echo - fi + if [[ -d "$dir_root/log" ]]; then + echo -e "检测到旧的log目录,拷贝到data目录...\n" + cp -rf $dir_root/log $dir_root/data + echo + fi - if [[ -d "$dir_root/config" ]]; then - echo -e "检测到旧的config目录,拷贝到data目录...\n" - cp -rf $dir_root/config $dir_root/data - echo - fi + if [[ -d "$dir_root/config" ]]; then + echo -e "检测到旧的config目录,拷贝到data目录...\n" + cp -rf $dir_root/config $dir_root/data + echo + fi } init_env diff --git a/shell/task.sh b/shell/task.sh index 6f0eaec3..02e9492b 100755 --- a/shell/task.sh +++ b/shell/task.sh @@ -7,350 +7,355 @@ dir_shell=$QL_DIR/shell ## 选择python3还是node define_program() { - local file_param=$1 - if [[ $file_param == *.js ]]; then - which_program="node" - elif [[ $file_param == *.py ]] || [[ $file_param == *.pyc ]]; then - which_program="python3" - elif [[ $file_param == *.sh ]]; then - which_program="bash" - elif [[ $file_param == *.ts ]]; then - which_program="ts-node-transpile-only" - else - which_program="" - fi + local file_param=$1 + if [[ $file_param == *.js ]]; then + which_program="node" + elif [[ $file_param == *.py ]] || [[ $file_param == *.pyc ]]; then + which_program="python3" + elif [[ $file_param == *.sh ]]; then + which_program="bash" + elif [[ $file_param == *.ts ]]; then + which_program="ts-node-transpile-only" + else + which_program="" + fi } random_delay() { - local random_delay_max=$RandomDelay - if [[ $random_delay_max ]] && [[ $random_delay_max -gt 0 ]]; then - local file_param=$1 - local file_extensions=${RandomDelayFileExtensions-"js"} - local ignored_minutes=${RandomDelayIgnoredMinutes-"0 30"} + local random_delay_max=$RandomDelay + if [[ $random_delay_max ]] && [[ $random_delay_max -gt 0 ]]; then + local file_param=$1 + local file_extensions=${RandomDelayFileExtensions-"js"} + local ignored_minutes=${RandomDelayIgnoredMinutes-"0 30"} - if [[ -n $file_extensions ]]; then - if ! echo "$file_param" | grep -qE "\.${file_extensions// /$|\\.}$"; then - # echo -e "\n当前文件需要准点运行, 放弃随机延迟\n" - return - fi - fi - - local current_min - current_min=$(date "+%-M") - for minute in $ignored_minutes; do - if [[ $current_min -eq $minute ]]; then - # echo -e "\n当前时间需要准点运行, 放弃随机延迟\n" - return - fi - done - - local delay_second=$(($(gen_random_num "$random_delay_max") + 1)) - echo -e "\n命令未添加 \"now\",随机延迟 $delay_second 秒后再执行任务,如需立即终止,请按 CTRL+C...\n" - sleep $delay_second + if [[ -n $file_extensions ]]; then + if ! echo "$file_param" | grep -qE "\.${file_extensions// /$|\\.}$"; then + # echo -e "\n当前文件需要准点运行, 放弃随机延迟\n" + return + fi fi + + local current_min + current_min=$(date "+%-M") + for minute in $ignored_minutes; do + if [[ $current_min -eq $minute ]]; then + # echo -e "\n当前时间需要准点运行, 放弃随机延迟\n" + return + fi + done + + local delay_second=$(($(gen_random_num "$random_delay_max") + 1)) + echo -e "\n命令未添加 \"now\",随机延迟 $delay_second 秒后再执行任务,如需立即终止,请按 CTRL+C...\n" + sleep $delay_second + fi } ## scripts目录下所有可运行脚本数组 gen_array_scripts() { - local dir_current=$(pwd) - local i="-1" - cd $dir_scripts - for file in $(ls); do - if [[ -f $file ]] && [[ $file == *.js && $file != sendNotify.js ]]; then - let i++ - array_scripts[i]=$(echo "$file" | perl -pe "s|$dir_scripts/||g") - array_scripts_name[i]=$(grep "new Env" $file | awk -F "'|\"" '{print $2}' | head -1) - [[ -z ${array_scripts_name[i]} ]] && array_scripts_name[i]="<未识别出活动名称>" - fi - done - cd $dir_current + local dir_current=$(pwd) + local i="-1" + cd $dir_scripts + for file in $(ls); do + if [[ -f $file ]] && [[ $file == *.js && $file != sendNotify.js ]]; then + let i++ + array_scripts[i]=$(echo "$file" | perl -pe "s|$dir_scripts/||g") + array_scripts_name[i]=$(grep "new Env" $file | awk -F "'|\"" '{print $2}' | head -1) + [[ -z ${array_scripts_name[i]} ]] && array_scripts_name[i]="<未识别出活动名称>" + fi + done + cd $dir_current } ## 使用说明 usage() { - define_cmd - gen_array_scripts - echo -e "task命令运行本程序自动添加进crontab的脚本,需要输入脚本的绝对路径或去掉 “$dir_scripts/” 目录后的相对路径(定时任务中请写作相对路径),用法为:" - echo -e "1.$cmd_task # 依次执行,如果设置了随机延迟,将随机延迟一定秒数" - echo -e "2.$cmd_task now # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中" - echo -e "3.$cmd_task conc <环境变量名称> <账号编号,空格分隔>(可选的) # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中,且可指定账号执行" - echo -e "4.$cmd_task desi <环境变量名称> <账号编号,空格分隔> # 指定账号执行,无论是否设置了随机延迟,均立即运行" - if [[ ${#array_scripts[*]} -gt 0 ]]; then - echo -e "\n当前有以下脚本可以运行:" - for ((i = 0; i < ${#array_scripts[*]}; i++)); do - echo -e "$(($i + 1)). ${array_scripts_name[i]}:${array_scripts[i]}" - done - else - echo -e "\n暂无脚本可以执行" - fi + define_cmd + gen_array_scripts + echo -e "task命令运行本程序自动添加进crontab的脚本,需要输入脚本的绝对路径或去掉 “$dir_scripts/” 目录后的相对路径(定时任务中请写作相对路径),用法为:" + echo -e "1.$cmd_task # 依次执行,如果设置了随机延迟,将随机延迟一定秒数" + echo -e "2.$cmd_task now # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中" + echo -e "3.$cmd_task conc <环境变量名称> <账号编号,空格分隔>(可选的) # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中,且可指定账号执行" + echo -e "4.$cmd_task desi <环境变量名称> <账号编号,空格分隔> # 指定账号执行,无论是否设置了随机延迟,均立即运行" + if [[ ${#array_scripts[*]} -gt 0 ]]; then + echo -e "\n当前有以下脚本可以运行:" + for ((i = 0; i < ${#array_scripts[*]}; i++)); do + echo -e "$(($i + 1)). ${array_scripts_name[i]}:${array_scripts[i]}" + done + else + echo -e "\n暂无脚本可以执行" + fi } ## run nohup,$1:文件名,不含路径,带后缀 run_nohup() { - local file_name=$1 - nohup node $file_name &>$log_path & + local file_name=$1 + nohup node $file_name &>$log_path & } handle_log_path() { - define_program "$file_param" - - local suffix="" - if [[ ! -z $ID ]]; then - suffix="_${ID}" + define_program "$file_param" + + local suffix="" + if [[ ! -z $ID ]]; then + suffix="_${ID}" + fi + time=$(date "+$time_format") + log_time=$(format_log_time "$time_format" "$time") + log_dir_tmp="${file_param##*/}" + if [[ $file_param =~ "/" ]]; then + if [[ $file_param == /* ]]; then + log_dir_tmp_path="${file_param:1}" + else + log_dir_tmp_path="${file_param}" fi - time=$(date "+$time_format") - log_time=$(format_log_time "$time_format" "$time") - log_dir_tmp="${file_param##*/}" - if [[ $file_param =~ "/" ]]; then - if [[ $file_param == /* ]]; then - log_dir_tmp_path="${file_param:1}" - else - log_dir_tmp_path="${file_param}" - fi - fi - log_dir_tmp_path="${log_dir_tmp_path%/*}" - log_dir_tmp_path="${log_dir_tmp_path##*/}" - [[ $log_dir_tmp_path ]] && log_dir_tmp="${log_dir_tmp_path}_${log_dir_tmp}" - log_dir="${log_dir_tmp%.*}${suffix}" - log_path="$log_dir/$log_time.log" - cmd=">> $dir_log/$log_path 2>&1" - [[ "$show_log" == "true" ]] && cmd="" - make_dir "$dir_log/$log_dir" + fi + log_dir_tmp_path="${log_dir_tmp_path%/*}" + log_dir_tmp_path="${log_dir_tmp_path##*/}" + [[ $log_dir_tmp_path ]] && log_dir_tmp="${log_dir_tmp_path}_${log_dir_tmp}" + log_dir="${log_dir_tmp%.*}${suffix}" + log_path="$log_dir/$log_time.log" + cmd=">> $dir_log/$log_path 2>&1" + [[ "$show_log" == "true" ]] && cmd="" + make_dir "$dir_log/$log_dir" +} + +check_server() { + cpu_idle=$(top -b -n 1 | grep Cpu | awk '{print $8}' | cut -f 1 -d "%") + eval echo -e "当前CPU占用 $cpu_use " $cmd + if [[ $cpu_use -gt $cpu_warn ]]; then + notify_api "CPU异常警告" "当前CPU占用 $cpu_use%" + exit 1 + fi + + mem_free=$(free -m | grep "Mem" | awk '{print $3}') + mem_total=$(free -m | grep "Mem" | awk '{print $2}') + mem_use=$(printf "%d%%" $((mem_free * 100 / mem_total)) | cut -f 1 -d "%") + eval echo -e "内存剩余 $mem_use% " $cmd + if [[ $mem_free -lt $mem_warn ]]; then + notify_api "内存异常警告" "当前内存占用 $mem_use%" + exit 1 + fi + + disk_use=$(df -P | grep /dev | grep -v -E '(tmp|boot|shm)' | awk '{print $5}' | cut -f 1 -d "%") + eval echo -e "磁盘占用 $disk_use% \\\n" $cmd + if [[ $disk_use -gt $disk_warn ]]; then + notify_api "磁盘异常警告" "当前磁盘占用 $disk_use%" + exit 1 + fi +} + +handle_task_before() { + handle_log_path + + begin_time=$(format_time "$time_format" "$time") + begin_timestamp=$(format_timestamp "$time_format" "$time") + + eval echo -e "\#\# 开始执行... $begin_time\\\n" $cmd + + [[ $is_macos -eq 0 ]] && check_server + + [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd + + [[ $ID ]] && update_cron "\"$ID\"" "0" "$$" "$log_path" "$begin_timestamp" + eval . $file_task_before "$@" $cmd } ## 正常运行单个脚本,$1:传入参数 run_normal() { - local file_param=$1 - if [[ $# -eq 1 ]]; then - random_delay "$file_param" - fi + local file_param=$1 + if [[ $# -eq 1 ]]; then + random_delay "$file_param" + fi - handle_log_path + handle_task_before - local begin_time=$(format_time "$time_format" "$time") - local begin_timestamp=$(format_timestamp "$time_format" "$time") - - eval echo -e "\#\# 开始执行... $begin_time\\\n" $cmd - [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd + cd $dir_scripts + local relative_path="${file_param%/*}" + if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then + cd ${relative_path} + file_param=${file_param/$relative_path\//} + fi - [[ $ID ]] && update_cron "\"$ID\"" "0" "$$" "$log_path" "$begin_timestamp" - eval . $file_task_before "$@" $cmd + eval $timeoutCmd $which_program $file_param $cmd - cd $dir_scripts - local relative_path="${file_param%/*}" - if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then - cd ${relative_path} - file_param=${file_param/$relative_path\//} - fi - - eval $timeoutCmd $which_program $file_param $cmd - - eval . $file_task_after "$@" $cmd - local end_time=$(date '+%Y-%m-%d %H:%M:%S') - local end_timestamp=$(date "+%s") - local diff_time=$(expr $end_timestamp - $begin_timestamp) - [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" - eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd + eval . $file_task_after "$@" $cmd + local end_time=$(date '+%Y-%m-%d %H:%M:%S') + local end_timestamp=$(date "+%s") + local diff_time=$(expr $end_timestamp - $begin_timestamp) + [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" + eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd } ## 并发执行时,设定的 RandomDelay 不会生效,即所有任务立即执行 run_concurrent() { - local file_param="$1" - local env_param="$2" - local num_param=$(echo "$3" | perl -pe "s|.*$2(.*)|\1|") - if [[ ! $env_param ]]; then - echo -e "\n 缺少并发运行的环境变量参数" - exit 1 - fi + local file_param="$1" + local env_param="$2" + local num_param=$(echo "$3" | perl -pe "s|.*$2(.*)|\1|") + if [[ ! $env_param ]]; then + echo -e "\n 缺少并发运行的环境变量参数" + exit 1 + fi - local envs=$(eval echo "\$${env_param}") - local array=($(echo $envs | sed 's/&/ /g')) - local tempArr=$(echo $num_param | perl -pe "s|(\d+)(-\|~\|_)(\d+)|{\1..\3}|g") - local runArr=($(eval echo $tempArr)) - runArr=($(awk -v RS=' ' '!a[$1]++' <<< ${runArr[@]})) + handle_task_before - local n=0 - for i in ${runArr[@]}; do - array_run[n]=${array[$i - 1]} - let n++ - done + local envs=$(eval echo "\$${env_param}") + local array=($(echo $envs | sed 's/&/ /g')) + local tempArr=$(echo $num_param | perl -pe "s|(\d+)(-\|~\|_)(\d+)|{\1..\3}|g") + local runArr=($(eval echo $tempArr)) + runArr=($(awk -v RS=' ' '!a[$1]++' <<<${runArr[@]})) - local cookieStr=$(echo ${array_run[*]} | sed 's/\ /\&/g') - [[ ! -z $cookieStr ]] && export ${env_param}=${cookieStr} + local n=0 + for i in ${runArr[@]}; do + array_run[n]=${array[$i - 1]} + let n++ + done - handle_log_path + local cookieStr=$(echo ${array_run[*]} | sed 's/\ /\&/g') + [[ ! -z $cookieStr ]] && export ${env_param}=${cookieStr} - local begin_time=$(format_time "$time_format" "$time") - local begin_timestamp=$(format_timestamp "$time_format" "$time") + local envs=$(eval echo "\$${env_param}") + local array=($(echo $envs | sed 's/&/ /g')) + single_log_time=$(date "+%Y-%m-%d-%H-%M-%S.%N") - eval echo -e "\#\# 开始执行... $begin_time\\\n" $cmd - [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd + cd $dir_scripts + local relative_path="${file_param%/*}" + if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then + cd ${relative_path} + file_param=${file_param/$relative_path\//} + fi + for i in "${!array[@]}"; do + export ${env_param}=${array[i]} + single_log_path="$dir_log/$log_dir/${single_log_time}_$((i + 1)).log" + eval $timeoutCmd $which_program $file_param &>$single_log_path & + done - [[ $ID ]] && update_cron "\"$ID\"" "0" "$$" "$log_path" "$begin_timestamp" - eval . $file_task_before "$@" $cmd + wait + for i in "${!array[@]}"; do + single_log_path="$dir_log/$log_dir/${single_log_time}_$((i + 1)).log" + eval cat $single_log_path $cmd + [[ -f $single_log_path ]] && rm -f $single_log_path + done - local envs=$(eval echo "\$${env_param}") - local array=($(echo $envs | sed 's/&/ /g')) - single_log_time=$(date "+%Y-%m-%d-%H-%M-%S.%N") - - cd $dir_scripts - local relative_path="${file_param%/*}" - if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then - cd ${relative_path} - file_param=${file_param/$relative_path\//} - fi - for i in "${!array[@]}"; do - export ${env_param}=${array[i]} - single_log_path="$dir_log/$log_dir/${single_log_time}_$((i + 1)).log" - eval $timeoutCmd $which_program $file_param &>$single_log_path & - done - - wait - for i in "${!array[@]}"; do - single_log_path="$dir_log/$log_dir/${single_log_time}_$((i + 1)).log" - eval cat $single_log_path $cmd - [[ -f $single_log_path ]] && rm -f $single_log_path - done - - eval . $file_task_after "$@" $cmd - local end_time=$(date '+%Y-%m-%d %H:%M:%S') - local end_timestamp=$(date "+%s") - local diff_time=$(( $end_timestamp - $begin_timestamp )) - [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" - eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd + eval . $file_task_after "$@" $cmd + local end_time=$(date '+%Y-%m-%d %H:%M:%S') + local end_timestamp=$(date "+%s") + local diff_time=$(($end_timestamp - $begin_timestamp)) + [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" + eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd } run_designated() { - local file_param="$1" - local env_param="$2" - local num_param=$(echo "$3" | perl -pe "s|.*$2(.*)|\1|") - if [[ ! $env_param ]] || [[ ! $num_param ]]; then - echo -e "\n 缺少单独运行的参数 task xxx.js desi Test 1 3" - exit 1 - fi + local file_param="$1" + local env_param="$2" + local num_param=$(echo "$3" | perl -pe "s|.*$2(.*)|\1|") + if [[ ! $env_param ]] || [[ ! $num_param ]]; then + echo -e "\n 缺少单独运行的参数 task xxx.js desi Test 1 3" + exit 1 + fi - handle_log_path + handle_task_before - local begin_time=$(format_time "$time_format" "$time") - local begin_timestamp=$(format_timestamp "$time_format" "$time") + local envs=$(eval echo "\$${env_param}") + local array=($(echo $envs | sed 's/&/ /g')) + local tempArr=$(echo $num_param | perl -pe "s|(\d+)(-\|~\|_)(\d+)|{\1..\3}|g") + local runArr=($(eval echo $tempArr)) + runArr=($(awk -v RS=' ' '!a[$1]++' <<<${runArr[@]})) - local envs=$(eval echo "\$${env_param}") - local array=($(echo $envs | sed 's/&/ /g')) - local tempArr=$(echo $num_param | perl -pe "s|(\d+)(-\|~\|_)(\d+)|{\1..\3}|g") - local runArr=($(eval echo $tempArr)) - runArr=($(awk -v RS=' ' '!a[$1]++' <<< ${runArr[@]})) + local n=0 + for i in ${runArr[@]}; do + array_run[n]=${array[$i - 1]} + let n++ + done - local n=0 - for i in ${runArr[@]}; do - array_run[n]=${array[$i - 1]} - let n++ - done + local cookieStr=$(echo ${array_run[*]} | sed 's/\ /\&/g') + [[ ! -z $cookieStr ]] && export ${env_param}=${cookieStr} - local cookieStr=$(echo ${array_run[*]} | sed 's/\ /\&/g') - [[ ! -z $cookieStr ]] && export ${env_param}=${cookieStr} + cd $dir_scripts + local relative_path="${file_param%/*}" + if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then + cd ${relative_path} + file_param=${file_param/$relative_path\//} + fi + eval $timeoutCmd $which_program $file_param $cmd - eval echo -e "\#\# 开始执行... $begin_time\\\n" $cmd - [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd - - [[ $ID ]] && update_cron "\"$ID\"" "0" "$$" "$log_path" "$begin_timestamp" - eval . $file_task_before "$@" $cmd - - cd $dir_scripts - local relative_path="${file_param%/*}" - if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then - cd ${relative_path} - file_param=${file_param/$relative_path\//} - fi - eval $timeoutCmd $which_program $file_param $cmd - - eval . $file_task_after "$@" $cmd - local end_time=$(date '+%Y-%m-%d %H:%M:%S') - local end_timestamp=$(date "+%s") - local diff_time=$(( $end_timestamp - $begin_timestamp )) - [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" - eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd + eval . $file_task_after "$@" $cmd + local end_time=$(date '+%Y-%m-%d %H:%M:%S') + local end_timestamp=$(date "+%s") + local diff_time=$(($end_timestamp - $begin_timestamp)) + [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" + eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd } ## 运行其他命令 run_else() { - local file_param="$1" + local file_param="$1" - handle_log_path + handle_task_before - local begin_time=$(format_time "$time_format" "$time") - local begin_timestamp=$(format_timestamp "$time_format" "$time") + cd $dir_scripts + local relative_path="${file_param%/*}" + if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then + cd ${relative_path} + file_param=${file_param/$relative_path\//} + fi - eval echo -e "\#\# 开始执行... $begin_time\\\n" $cmd - [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd - [[ $ID ]] && update_cron "\"$ID\"" "0" "$$" "$log_path" "$begin_timestamp" - eval . $file_task_before "$@" $cmd + shift + eval $timeoutCmd $which_program "$file_param" "$@" $cmd - cd $dir_scripts - local relative_path="${file_param%/*}" - if [[ ! -z ${relative_path} ]] && [[ ${file_param} =~ "/" ]]; then - cd ${relative_path} - file_param=${file_param/$relative_path\//} - fi - - shift - eval $timeoutCmd $which_program "$file_param" "$@" $cmd - - eval . $file_task_after "$file_param" "$@" $cmd - local end_time=$(date '+%Y-%m-%d %H:%M:%S') - local end_timestamp=$(date "+%s") - local diff_time=$(( $end_timestamp - $begin_timestamp )) - [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" - eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd + eval . $file_task_after "$file_param" "$@" $cmd + local end_time=$(date '+%Y-%m-%d %H:%M:%S') + local end_timestamp=$(date "+%s") + local diff_time=$(($end_timestamp - $begin_timestamp)) + [[ $ID ]] && update_cron "\"$ID\"" "1" "" "$log_path" "$begin_timestamp" "$diff_time" + eval echo -e "\\\n\#\# 执行结束... $end_time 耗时 $diff_time 秒" $cmd } ## 命令检测 main() { - show_log="false" - while getopts ":l" opt - do - case $opt in - l) - show_log="true" - ;; - esac - done - [[ "$show_log" == "true" ]] && shift $(($OPTIND - 1)) + show_log="false" + while getopts ":l" opt; do + case $opt in + l) + show_log="true" + ;; + esac + done + [[ "$show_log" == "true" ]] && shift $(($OPTIND - 1)) - timeoutCmd="" - if type timeout &>/dev/null; then - timeoutCmd="timeout -k 10s $command_timeout_time " - fi + timeoutCmd="" + if type timeout &>/dev/null; then + timeoutCmd="timeout -k 10s $command_timeout_time " + fi - time_format="%Y-%m-%d %H:%M:%S" - if [[ $1 == *.js ]] || [[ $1 == *.py ]] || [[ $1 == *.pyc ]] || [[ $1 == *.sh ]] || [[ $1 == *.ts ]]; then - case $# in - 1) - run_normal "$1" - ;; - *) - case $2 in - now) - run_normal "$1" "$2" - ;; - conc) - run_concurrent "$1" "$3" "$*" - ;; - desi) - run_designated "$1" "$3" "$*" - ;; - *) - run_else "$@" - ;; - esac - ;; - esac - [[ -f "$dir_log/$log_path" ]] && cat "$dir_log/$log_path" - elif [[ $# -eq 0 ]]; then - echo - usage - else + time_format="%Y-%m-%d %H:%M:%S" + if [[ $1 == *.js ]] || [[ $1 == *.py ]] || [[ $1 == *.pyc ]] || [[ $1 == *.sh ]] || [[ $1 == *.ts ]]; then + case $# in + 1) + run_normal "$1" + ;; + *) + case $2 in + now) + run_normal "$1" "$2" + ;; + conc) + run_concurrent "$1" "$3" "$*" + ;; + desi) + run_designated "$1" "$3" "$*" + ;; + *) run_else "$@" - fi + ;; + esac + ;; + esac + [[ -f "$dir_log/$log_path" ]] && cat "$dir_log/$log_path" + elif [[ $# -eq 0 ]]; then + echo + usage + else + run_else "$@" + fi } main "$@" diff --git a/shell/update.sh b/shell/update.sh index 7bab6752..80802f80 100755 --- a/shell/update.sh +++ b/shell/update.sh @@ -8,504 +8,503 @@ send_mark=$dir_shell/send_mark ## 检测cron的差异,$1:脚本清单文件路径,$2:cron任务清单文件路径,$3:增加任务清单文件路径,$4:删除任务清单文件路径 diff_cron() { - local list_scripts="$1" - local list_task="$2" - local list_add="$3" - local list_drop="$4" - if [[ -s $list_task ]] && [[ -s $list_scripts ]]; then - grep -vwf $list_task $list_scripts >$list_add - grep -vwf $list_scripts $list_task >$list_drop - fi + local list_scripts="$1" + local list_task="$2" + local list_add="$3" + local list_drop="$4" + if [[ -s $list_task ]] && [[ -s $list_scripts ]]; then + grep -vwf $list_task $list_scripts >$list_add + grep -vwf $list_scripts $list_task >$list_drop + fi - if [[ ! -s $list_task ]] && [[ -s $list_scripts ]]; then - cp -f $list_scripts $list_add - fi + if [[ ! -s $list_task ]] && [[ -s $list_scripts ]]; then + cp -f $list_scripts $list_add + fi - if [[ ! -s $list_scripts ]] && [[ -s $list_task ]]; then - cp -f $list_task $list_drop - fi + if [[ ! -s $list_scripts ]] && [[ -s $list_task ]]; then + cp -f $list_task $list_drop + fi } ## 检测配置文件版本 detect_config_version() { - ## 识别出两个文件的版本号 - ver_config_sample=$(grep " Version: " $file_config_sample | perl -pe "s|.+v((\d+\.?){3})|\1|") - [[ -f $file_config_user ]] && ver_config_user=$(grep " Version: " $file_config_user | perl -pe "s|.+v((\d+\.?){3})|\1|") + ## 识别出两个文件的版本号 + ver_config_sample=$(grep " Version: " $file_config_sample | perl -pe "s|.+v((\d+\.?){3})|\1|") + [[ -f $file_config_user ]] && ver_config_user=$(grep " Version: " $file_config_user | perl -pe "s|.+v((\d+\.?){3})|\1|") - ## 删除旧的发送记录文件 - [[ -f $send_mark ]] && [[ $(cat $send_mark) != $ver_config_sample ]] && rm -f $send_mark + ## 删除旧的发送记录文件 + [[ -f $send_mark ]] && [[ $(cat $send_mark) != $ver_config_sample ]] && rm -f $send_mark - ## 识别出更新日期和更新内容 - update_date=$(grep " Date: " $file_config_sample | awk -F ": " '{print $2}') - update_content=$(grep " Update Content: " $file_config_sample | awk -F ": " '{print $2}') + ## 识别出更新日期和更新内容 + update_date=$(grep " Date: " $file_config_sample | awk -F ": " '{print $2}') + update_content=$(grep " Update Content: " $file_config_sample | awk -F ": " '{print $2}') - ## 如果是今天,并且版本号不一致,则发送通知 - if [[ -f $file_config_user ]] && [[ $ver_config_user != $ver_config_sample ]] && [[ $update_date == $(date "+%Y-%m-%d") ]]; then - if [[ ! -f $send_mark ]]; then - local notify_title="配置文件更新通知" - local notify_content="更新日期: $update_date\n用户版本: $ver_config_user\n新的版本: $ver_config_sample\n更新内容: $update_content\n更新说明: 如需使用新功能请对照config.sample.sh,将相关新参数手动增加到你自己的config.sh中,否则请无视本消息。本消息只在该新版本配置文件更新当天发送一次。\n" - echo -e $notify_content - notify_api "$notify_title" "$notify_content" - [[ $? -eq 0 ]] && echo $ver_config_sample >$send_mark - fi - else - [[ -f $send_mark ]] && rm -f $send_mark + ## 如果是今天,并且版本号不一致,则发送通知 + if [[ -f $file_config_user ]] && [[ $ver_config_user != $ver_config_sample ]] && [[ $update_date == $(date "+%Y-%m-%d") ]]; then + if [[ ! -f $send_mark ]]; then + local notify_title="配置文件更新通知" + local notify_content="更新日期: $update_date\n用户版本: $ver_config_user\n新的版本: $ver_config_sample\n更新内容: $update_content\n更新说明: 如需使用新功能请对照config.sample.sh,将相关新参数手动增加到你自己的config.sh中,否则请无视本消息。本消息只在该新版本配置文件更新当天发送一次。\n" + echo -e $notify_content + notify_api "$notify_title" "$notify_content" + [[ $? -eq 0 ]] && echo $ver_config_sample >$send_mark fi + else + [[ -f $send_mark ]] && rm -f $send_mark + fi } ## 输出是否有新的或失效的定时任务,$1:新的或失效的任务清单文件路径,$2:新/失效 output_list_add_drop() { - local list=$1 - local type=$2 - if [[ -s $list ]]; then - echo -e "检测到有$type的定时任务:\n" - cat $list - echo - fi + local list=$1 + local type=$2 + if [[ -s $list ]]; then + echo -e "检测到有$type的定时任务:\n" + cat $list + echo + fi } ## 自动删除失效的脚本与定时任务,需要:1.AutoDelCron 设置为 true;2.正常更新js脚本,没有报错;3.存在失效任务 ## $1:失效任务清单文件路径 del_cron() { - local list_drop=$1 - local path=$2 - local detail="" - local ids="" - echo -e "开始尝试自动删除失效的定时任务...\n" - for cron in $(cat $list_drop); do - local id=$(cat $list_crontab_user | grep -E "$cmd_task $cron" | perl -pe "s|.*ID=(.*) $cmd_task $cron\.*|\1|" | head -1 | head -1 | awk -F " " '{print $1}') - if [[ $ids ]]; then - ids="$ids,\"$id\"" - else - ids="\"$id\"" - fi - cron_file="$dir_scripts/${cron}" - if [[ -f $cron_file ]]; then - cron_name=$(grep "new Env" $cron_file | awk -F "\(" '{print $2}' | awk -F "\)" '{print $1}' | sed 's:^.\(.*\).$:\1:' | head -1) - rm -f $cron_file - fi - [[ -z $cron_name ]] && cron_name="$cron" - if [[ $detail ]]; then - detail="${detail}\n${cron_name}" - else - detail="${cron_name}" - fi - done + local list_drop=$1 + local path=$2 + local detail="" + local ids="" + echo -e "开始尝试自动删除失效的定时任务...\n" + for cron in $(cat $list_drop); do + local id=$(cat $list_crontab_user | grep -E "$cmd_task $cron" | perl -pe "s|.*ID=(.*) $cmd_task $cron\.*|\1|" | head -1 | head -1 | awk -F " " '{print $1}') if [[ $ids ]]; then - result=$(del_cron_api "$ids") - notify_api "$path 删除任务${result}" "$detail" + ids="$ids,\"$id\"" + else + ids="\"$id\"" fi + cron_file="$dir_scripts/${cron}" + if [[ -f $cron_file ]]; then + cron_name=$(grep "new Env" $cron_file | awk -F "\(" '{print $2}' | awk -F "\)" '{print $1}' | sed 's:^.\(.*\).$:\1:' | head -1) + rm -f $cron_file + fi + [[ -z $cron_name ]] && cron_name="$cron" + if [[ $detail ]]; then + detail="${detail}\n${cron_name}" + else + detail="${cron_name}" + fi + done + if [[ $ids ]]; then + result=$(del_cron_api "$ids") + notify_api "$path 删除任务${result}" "$detail" + fi } ## 自动增加定时任务,需要:1.AutoAddCron 设置为 true;2.正常更新js脚本,没有报错;3.存在新任务;4.crontab.list存在并且不为空 ## $1:新任务清单文件路径 add_cron() { - local list_add=$1 - local path=$2 - echo -e "开始尝试自动添加定时任务...\n" - local detail="" - cd $dir_scripts - for file in $(cat $list_add); do - local file_name=${file/${path}\//} - file_name=${file_name/${path}\_/} - if [[ -f $file ]]; then - cron_line=$( - perl -ne "{ + local list_add=$1 + local path=$2 + echo -e "开始尝试自动添加定时任务...\n" + local detail="" + cd $dir_scripts + for file in $(cat $list_add); do + local file_name=${file/${path}\//} + file_name=${file_name/${path}\_/} + if [[ -f $file ]]; then + cron_line=$( + perl -ne "{ print if /.*([\d\*]*[\*-\/,\d]*[\d\*] ){4,5}[\d\*]*[\*-\/,\d]*[\d\*]( |,|\").*$file_name/ }" $file | - perl -pe "{ + perl -pe "{ s|[^\d\*]*(([\d\*]*[\*-\/,\d]*[\d\*] ){4,5}[\d\*]*[\*-\/,\d]*[\d\*])( \|,\|\").*/?$file_name.*|\1|g; s|\*([\d\*])(.*)|\1\2|g; s| | |g; }" | sort -u | head -1 - ) - cron_name=$(grep "new Env" $file | awk -F "\(" '{print $2}' | awk -F "\)" '{print $1}' | sed 's:^.\(.*\).$:\1:' | head -1) - [[ -z $cron_name ]] && cron_name="$file_name" - [[ -z $cron_line ]] && cron_line=$(grep "cron:" $file | awk -F ":" '{print $2}' | head -1 | xargs) - [[ -z $cron_line ]] && cron_line=$(grep "cron " $file | awk -F "cron \"" '{print $2}' | awk -F "\" " '{print $1}' | head -1 | xargs) - [[ -z $cron_line ]] && cron_line="$default_cron" - result=$(add_cron_api "$cron_line:$cmd_task $file:$cron_name") - echo -e "$result" - if [[ $detail ]]; then - detail="${detail}${result}\n" - else - detail="${result}\n" - fi - fi - done - notify_api "$path 新增任务" "$detail" + ) + cron_name=$(grep "new Env" $file | awk -F "\(" '{print $2}' | awk -F "\)" '{print $1}' | sed 's:^.\(.*\).$:\1:' | head -1) + [[ -z $cron_name ]] && cron_name="$file_name" + [[ -z $cron_line ]] && cron_line=$(grep "cron:" $file | awk -F ":" '{print $2}' | head -1 | xargs) + [[ -z $cron_line ]] && cron_line=$(grep "cron " $file | awk -F "cron \"" '{print $2}' | awk -F "\" " '{print $1}' | head -1 | xargs) + [[ -z $cron_line ]] && cron_line="$default_cron" + result=$(add_cron_api "$cron_line:$cmd_task $file:$cron_name") + echo -e "$result" + if [[ $detail ]]; then + detail="${detail}${result}\n" + else + detail="${result}\n" + fi + fi + done + notify_api "$path 新增任务" "$detail" } ## 更新仓库 update_repo() { - local url="$1" - local path="$2" - local blackword="$3" - local dependence="$4" - local branch="$5" - local extensions="$6" - local tmp="${url%/*}" - local authorTmp1="${tmp##*/}" - local authorTmp2="${authorTmp1##*:}" - local author="${authorTmp2##*.}" + local url="$1" + local path="$2" + local blackword="$3" + local dependence="$4" + local branch="$5" + local extensions="$6" + local tmp="${url%/*}" + local authorTmp1="${tmp##*/}" + local authorTmp2="${authorTmp1##*:}" + local author="${authorTmp2##*.}" - local repo_path="${dir_repo}/${uniq_path}" + local repo_path="${dir_repo}/${uniq_path}" - make_dir "${dir_scripts}/${uniq_path}" + make_dir "${dir_scripts}/${uniq_path}" - local formatUrl="$url" - if [[ -d ${repo_path}/.git ]]; then - reset_romote_url ${repo_path} "${formatUrl}" "${branch}" - git_pull_scripts ${repo_path} "${branch}" - else - git_clone_scripts "${formatUrl}" ${repo_path} "${branch}" - fi - if [[ $exit_status -eq 0 ]]; then - echo -e "\n更新${repo_path}成功...\n" - diff_scripts "$repo_path" "$author" "$path" "$blackword" "$dependence" "$extensions" - else - echo -e "\n更新${repo_path}失败,请检查网络...\n" - fi + local formatUrl="$url" + if [[ -d ${repo_path}/.git ]]; then + reset_romote_url ${repo_path} "${formatUrl}" "${branch}" + git_pull_scripts ${repo_path} "${branch}" + else + git_clone_scripts "${formatUrl}" ${repo_path} "${branch}" + fi + if [[ $exit_status -eq 0 ]]; then + echo -e "\n更新${repo_path}成功...\n" + diff_scripts "$repo_path" "$author" "$path" "$blackword" "$dependence" "$extensions" + else + echo -e "\n更新${repo_path}失败,请检查网络...\n" + fi } ## 更新所有 raw 文件 update_raw() { - echo -e "--------------------------------------------------------------\n" - local url="$1" - local raw_url="$url" - local suffix="${raw_url##*.}" - local raw_file_name="${uniq_path}.${suffix}" - echo -e "开始下载:${raw_url} \n\n保存路径:$dir_raw/${raw_file_name}\n" + echo -e "--------------------------------------------------------------\n" + local url="$1" + local raw_url="$url" + local suffix="${raw_url##*.}" + local raw_file_name="${uniq_path}.${suffix}" + echo -e "开始下载:${raw_url} \n\n保存路径:$dir_raw/${raw_file_name}\n" - set_proxy - wget -q --no-check-certificate -O "$dir_raw/${raw_file_name}.new" ${raw_url} - unset_proxy + set_proxy + wget -q --no-check-certificate -O "$dir_raw/${raw_file_name}.new" ${raw_url} + unset_proxy - if [[ $? -eq 0 ]]; then - mv "$dir_raw/${raw_file_name}.new" "$dir_raw/${raw_file_name}" - echo -e "下载 ${raw_file_name} 成功...\n" - cd $dir_raw - local filename="raw_${raw_file_name}" - local cron_id=$(cat $list_crontab_user | grep -E "$cmd_task $filename" | perl -pe "s|.*ID=(.*) $cmd_task $filename\.*|\1|" | head -1 | head -1 | awk -F " " '{print $1}') - cp -f $raw_file_name $dir_scripts/${filename} - cron_line=$( - perl -ne "{ + if [[ $? -eq 0 ]]; then + mv "$dir_raw/${raw_file_name}.new" "$dir_raw/${raw_file_name}" + echo -e "下载 ${raw_file_name} 成功...\n" + cd $dir_raw + local filename="raw_${raw_file_name}" + local cron_id=$(cat $list_crontab_user | grep -E "$cmd_task $filename" | perl -pe "s|.*ID=(.*) $cmd_task $filename\.*|\1|" | head -1 | head -1 | awk -F " " '{print $1}') + cp -f $raw_file_name $dir_scripts/${filename} + cron_line=$( + perl -ne "{ print if /.*([\d\*]*[\*-\/,\d]*[\d\*] ){4,5}[\d\*]*[\*-\/,\d]*[\d\*]( |,|\").*$raw_file_name/ }" $raw_file_name | - perl -pe "{ + perl -pe "{ s|[^\d\*]*(([\d\*]*[\*-\/,\d]*[\d\*] ){4,5}[\d\*]*[\*-\/,\d]*[\d\*])( \|,\|\").*/?$raw_file_name.*|\1|g; s|\*([\d\*])(.*)|\1\2|g; s| | |g; }" | sort -u | head -1 - ) - cron_name=$(grep "new Env" $raw_file_name | awk -F "\(" '{print $2}' | awk -F "\)" '{print $1}' | sed 's:^.\(.*\).$:\1:' | head -1) - [[ -z $cron_name ]] && cron_name="$raw_file_name" - [[ -z $cron_line ]] && cron_line=$(grep "cron:" $raw_file_name | awk -F ":" '{print $2}' | head -1 | xargs) - [[ -z $cron_line ]] && cron_line=$(grep "cron " $raw_file_name | awk -F "cron \"" '{print $2}' | awk -F "\" " '{print $1}' | head -1 | xargs) - [[ -z $cron_line ]] && cron_line="$default_cron" - if [[ -z $cron_id ]]; then - result=$(add_cron_api "$cron_line:$cmd_task $filename:$cron_name") - echo -e "$result\n" - notify_api "新增任务通知" "\n$result" - # update_cron_api "$cron_line:$cmd_task $filename:$cron_name:$cron_id" - fi - else - echo -e "下载 ${raw_file_name} 失败,保留之前正常下载的版本...\n" - [[ -f "$dir_raw/${raw_file_name}.new" ]] && rm -f "$dir_raw/${raw_file_name}.new" + ) + cron_name=$(grep "new Env" $raw_file_name | awk -F "\(" '{print $2}' | awk -F "\)" '{print $1}' | sed 's:^.\(.*\).$:\1:' | head -1) + [[ -z $cron_name ]] && cron_name="$raw_file_name" + [[ -z $cron_line ]] && cron_line=$(grep "cron:" $raw_file_name | awk -F ":" '{print $2}' | head -1 | xargs) + [[ -z $cron_line ]] && cron_line=$(grep "cron " $raw_file_name | awk -F "cron \"" '{print $2}' | awk -F "\" " '{print $1}' | head -1 | xargs) + [[ -z $cron_line ]] && cron_line="$default_cron" + if [[ -z $cron_id ]]; then + result=$(add_cron_api "$cron_line:$cmd_task $filename:$cron_name") + echo -e "$result\n" + notify_api "新增任务通知" "\n$result" + # update_cron_api "$cron_line:$cmd_task $filename:$cron_name:$cron_id" fi + else + echo -e "下载 ${raw_file_name} 失败,保留之前正常下载的版本...\n" + [[ -f "$dir_raw/${raw_file_name}.new" ]] && rm -f "$dir_raw/${raw_file_name}.new" + fi } ## 调用用户自定义的extra.sh run_extra_shell() { - if [[ ${EnableExtraShell} == true ]]; then - if [[ -f $file_extra_shell ]]; then - echo -e "--------------------------------------------------------------\n" - . $file_extra_shell - else - echo -e "$file_extra_shell文件不存在,跳过执行...\n" - fi + if [[ ${EnableExtraShell} == true ]]; then + if [[ -f $file_extra_shell ]]; then + echo -e "--------------------------------------------------------------\n" + . $file_extra_shell + else + echo -e "$file_extra_shell文件不存在,跳过执行...\n" fi + fi } ## 脚本用法 usage() { - echo -e "本脚本用法:" - echo -e "1. $cmd_update update # 更新并重启青龙" - echo -e "2. $cmd_update extra # 运行自定义脚本" - echo -e "3. $cmd_update raw # 更新单个脚本文件" - echo -e "4. $cmd_update repo # 更新单个仓库的脚本" - echo -e "5. $cmd_update rmlog # 删除旧日志" - echo -e "6. $cmd_update bot # 启动tg-bot" - echo -e "7. $cmd_update check # 检测青龙环境并修复" - echo -e "8. $cmd_update resetlet # 重置登录错误次数" - echo -e "9. $cmd_update resettfa # 禁用两步登录" + echo -e "本脚本用法:" + echo -e "1. $cmd_update update # 更新并重启青龙" + echo -e "2. $cmd_update extra # 运行自定义脚本" + echo -e "3. $cmd_update raw # 更新单个脚本文件" + echo -e "4. $cmd_update repo # 更新单个仓库的脚本" + echo -e "5. $cmd_update rmlog # 删除旧日志" + echo -e "6. $cmd_update bot # 启动tg-bot" + echo -e "7. $cmd_update check # 检测青龙环境并修复" + echo -e "8. $cmd_update resetlet # 重置登录错误次数" + echo -e "9. $cmd_update resettfa # 禁用两步登录" } ## 更新qinglong update_qinglong() { - patch_version &>/dev/null + patch_version &>/dev/null - export isFirstStartServer=false + export isFirstStartServer=false - local all_branch=$(git branch -a) - local primary_branch="master" - if [[ "${all_branch}" =~ "${current_branch}" ]]; then - primary_branch="${current_branch}" - fi - [[ -f $dir_root/package.json ]] && ql_depend_old=$(cat $dir_root/package.json) - reset_romote_url ${dir_root} "https://github.com/whyour/qinglong.git" ${primary_branch} - git_pull_scripts $dir_root ${primary_branch} + local all_branch=$(git branch -a) + local primary_branch="master" + if [[ "${all_branch}" =~ "${current_branch}" ]]; then + primary_branch="${current_branch}" + fi + [[ -f $dir_root/package.json ]] && ql_depend_old=$(cat $dir_root/package.json) + reset_romote_url ${dir_root} "https://github.com/whyour/qinglong.git" ${primary_branch} + git_pull_scripts $dir_root ${primary_branch} - if [[ $exit_status -eq 0 ]]; then - echo -e "\n更新青龙源文件成功...\n" - cp -f $file_config_sample $dir_config/config.sample.sh - detect_config_version - update_depend + if [[ $exit_status -eq 0 ]]; then + echo -e "\n更新青龙源文件成功...\n" + cp -f $file_config_sample $dir_config/config.sample.sh + detect_config_version + update_depend - [[ -f $dir_root/package.json ]] && ql_depend_new=$(cat $dir_root/package.json) - [[ "$ql_depend_old" != "$ql_depend_new" ]] && npm_install_2 $dir_root + [[ -f $dir_root/package.json ]] && ql_depend_new=$(cat $dir_root/package.json) + [[ "$ql_depend_old" != "$ql_depend_new" ]] && npm_install_2 $dir_root - update_qinglong_static "$1" "$primary_branch" - else - echo -e "\n更新青龙源文件失败,请检查网络...\n" - fi + update_qinglong_static "$1" "$primary_branch" + else + echo -e "\n更新青龙源文件失败,请检查网络...\n" + fi } update_qinglong_static() { - local no_restart="$1" - local primary_branch="$2" - local url="https://github.com/whyour/qinglong-static.git" - if [[ -d ${ql_static_repo}/.git ]]; then - reset_romote_url ${ql_static_repo} ${url} ${primary_branch} - git_pull_scripts ${ql_static_repo} ${primary_branch} - else - git_clone_scripts ${url} ${ql_static_repo} ${primary_branch} - fi - if [[ $exit_status -eq 0 ]]; then - echo -e "\n更新青龙静态资源成功...\n" - local static_version=$(cat $dir_root/src/version.ts | perl -pe "s|.*\'(.*)\';\.*|\1|" | head -1) - echo -e "\n当前版本 $static_version...\n" - - rm -rf $dir_static/* - cp -rf $ql_static_repo/* $dir_static - if [[ $no_restart != "no-restart" ]]; then - nginx -s reload 2>/dev/null || nginx -c /etc/nginx/nginx.conf - echo -e "重启面板中..." - sleep 3 - reload_pm2 - fi - else - echo -e "\n更新青龙静态资源失败,请检查网络...\n" + local no_restart="$1" + local primary_branch="$2" + local url="https://github.com/whyour/qinglong-static.git" + if [[ -d ${ql_static_repo}/.git ]]; then + reset_romote_url ${ql_static_repo} ${url} ${primary_branch} + git_pull_scripts ${ql_static_repo} ${primary_branch} + else + git_clone_scripts ${url} ${ql_static_repo} ${primary_branch} + fi + if [[ $exit_status -eq 0 ]]; then + echo -e "\n更新青龙静态资源成功...\n" + local static_version=$(cat $dir_root/src/version.ts | perl -pe "s|.*\'(.*)\';\.*|\1|" | head -1) + echo -e "\n当前版本 $static_version...\n" + + rm -rf $dir_static/* + cp -rf $ql_static_repo/* $dir_static + if [[ $no_restart != "no-restart" ]]; then + nginx -s reload 2>/dev/null || nginx -c /etc/nginx/nginx.conf + echo -e "重启面板中..." + sleep 3 + reload_pm2 fi + else + echo -e "\n更新青龙静态资源失败,请检查网络...\n" + fi } ## 对比脚本 diff_scripts() { - local dir_current=$(pwd) - local repo_path="$1" - local author="$2" - local path="$3" - local blackword="$4" - local dependence="$5" - local extensions="$6" + local dir_current=$(pwd) + local repo_path="$1" + local author="$2" + local path="$3" + local blackword="$4" + local dependence="$5" + local extensions="$6" - gen_list_repo "$repo_path" "$author" "$path" "$blackword" "$dependence" "$extensions" + gen_list_repo "$repo_path" "$author" "$path" "$blackword" "$dependence" "$extensions" - local list_add="$dir_list_tmp/${uniq_path}_add.list" - local list_drop="$dir_list_tmp/${uniq_path}_drop.list" - diff_cron "$dir_list_tmp/${uniq_path}_scripts.list" "$dir_list_tmp/${uniq_path}_user.list" $list_add $list_drop + local list_add="$dir_list_tmp/${uniq_path}_add.list" + local list_drop="$dir_list_tmp/${uniq_path}_drop.list" + diff_cron "$dir_list_tmp/${uniq_path}_scripts.list" "$dir_list_tmp/${uniq_path}_user.list" $list_add $list_drop - if [[ -s $list_drop ]]; then - output_list_add_drop $list_drop "失效" - if [[ ${AutoDelCron} == true ]]; then - del_cron $list_drop $uniq_path - fi + if [[ -s $list_drop ]]; then + output_list_add_drop $list_drop "失效" + if [[ ${AutoDelCron} == true ]]; then + del_cron $list_drop $uniq_path fi - if [[ -s $list_add ]]; then - output_list_add_drop $list_add "新" - if [[ ${AutoAddCron} == true ]]; then - add_cron $list_add $uniq_path - fi + fi + if [[ -s $list_add ]]; then + output_list_add_drop $list_add "新" + if [[ ${AutoAddCron} == true ]]; then + add_cron $list_add $uniq_path fi - cd $dir_current + fi + cd $dir_current } ## 生成脚本的路径清单文件 gen_list_repo() { - local dir_current=$(pwd) - local repo_path="$1" - local author="$2" - local path="$3" - local blackword="$4" - local dependence="$5" + local dir_current=$(pwd) + local repo_path="$1" + local author="$2" + local path="$3" + local blackword="$4" + local dependence="$5" - rm -f $dir_list_tmp/${uniq_path}*.list &>/dev/null + rm -f $dir_list_tmp/${uniq_path}*.list &>/dev/null + cd ${repo_path} + + local cmd="find ." + local index=0 + if [[ $6 ]]; then + file_extensions="$6" + if [[ $file_extensions =~ "|" ]]; then + file_extensions=$(echo $file_extensions | sed 's/|/ /g') + fi + fi + for extension in $file_extensions; do + if [[ $index -eq 0 ]]; then + cmd="${cmd} -name \"*.${extension}\"" + else + cmd="${cmd} -o -name \"*.${extension}\"" + fi + let index+=1 + done + files=$(eval $cmd | sed 's/^..//') + if [[ $path ]]; then + files=$(echo "$files" | egrep $path) + fi + if [[ $blackword ]]; then + files=$(echo "$files" | egrep -v $blackword) + fi + + cp -f $file_notify_js "${dir_scripts}/${uniq_path}" + cp -f $file_notify_py "${dir_scripts}/${uniq_path}" + + if [[ $dependence ]]; then cd ${repo_path} - - local cmd="find ." - local index=0 - if [[ $6 ]]; then - file_extensions="$6" - if [[ $file_extensions =~ "|" ]]; then - file_extensions=$(echo $file_extensions | sed 's/|/ /g') - fi - fi - for extension in $file_extensions; do - if [[ $index -eq 0 ]]; then - cmd="${cmd} -name \"*.${extension}\"" - else - cmd="${cmd} -o -name \"*.${extension}\"" - fi - let index+=1 + results=$(eval $cmd | sed 's/^..//' | egrep $dependence) + for _file in ${results}; do + file_path=$(dirname $_file) + make_dir "${dir_scripts}/${uniq_path}/${file_path}" + cp -f $_file "${dir_scripts}/${uniq_path}/${file_path}" done - files=$(eval $cmd | sed 's/^..//') - if [[ $path ]]; then - files=$(echo "$files" | egrep $path) - fi - if [[ $blackword ]]; then - files=$(echo "$files" | egrep -v $blackword) - fi + fi - cp -f $file_notify_js "${dir_scripts}/${uniq_path}" - cp -f $file_notify_py "${dir_scripts}/${uniq_path}" + if [[ -d $dir_dep ]]; then + cp -rf $dir_dep/* "${dir_scripts}/${uniq_path}" &>/dev/null + fi - if [[ $dependence ]]; then - cd ${repo_path} - results=$(eval $cmd | sed 's/^..//' | egrep $dependence) - for _file in ${results}; do - file_path=$(dirname $_file) - make_dir "${dir_scripts}/${uniq_path}/${file_path}" - cp -f $_file "${dir_scripts}/${uniq_path}/${file_path}" - done + for file in ${files}; do + filename=$(basename $file) + cp -f $file "$dir_scripts/${uniq_path}/${filename}" + echo "${uniq_path}/${filename}" >>"$dir_list_tmp/${uniq_path}_scripts.list" + cron_id=$(cat $list_crontab_user | grep -E "$cmd_task ${uniq_path}_${filename}" | perl -pe "s|.*ID=(.*) $cmd_task ${uniq_path}_${filename}\.*|\1|" | head -1 | awk -F " " '{print $1}') + if [[ $cron_id ]]; then + result=$(update_cron_command_api "$cmd_task ${uniq_path}/${filename}:$cron_id") fi - - if [[ -d $dir_dep ]]; then - cp -rf $dir_dep/* "${dir_scripts}/${uniq_path}" &>/dev/null - fi - - for file in ${files}; do - filename=$(basename $file) - cp -f $file "$dir_scripts/${uniq_path}/${filename}" - echo "${uniq_path}/${filename}" >>"$dir_list_tmp/${uniq_path}_scripts.list" - cron_id=$(cat $list_crontab_user | grep -E "$cmd_task ${uniq_path}_${filename}" | perl -pe "s|.*ID=(.*) $cmd_task ${uniq_path}_${filename}\.*|\1|" | head -1 | awk -F " " '{print $1}') - if [[ $cron_id ]]; then - result=$(update_cron_command_api "$cmd_task ${uniq_path}/${filename}:$cron_id") - fi - done - grep -E "${cmd_task} ${uniq_path}" ${list_crontab_user} | perl -pe "s|.*ID=(.*) ${cmd_task} (${uniq_path}.*)\.*|\2|" | awk -F " " '{print $1}' | sort -u >"$dir_list_tmp/${uniq_path}_user.list" - cd $dir_current + done + grep -E "${cmd_task} ${uniq_path}" ${list_crontab_user} | perl -pe "s|.*ID=(.*) ${cmd_task} (${uniq_path}.*)\.*|\2|" | awk -F " " '{print $1}' | sort -u >"$dir_list_tmp/${uniq_path}_user.list" + cd $dir_current } get_uniq_path() { - local url="$1" - local branch="$2" - local urlTmp="${url%*/}" - local repoTmp="${urlTmp##*/}" - local repo="${repoTmp%.*}" - local tmp="${url%/*}" - local authorTmp1="${tmp##*/}" - local authorTmp2="${authorTmp1##*:}" - local author="${authorTmp2##*.}" + local url="$1" + local branch="$2" + local urlTmp="${url%*/}" + local repoTmp="${urlTmp##*/}" + local repo="${repoTmp%.*}" + local tmp="${url%/*}" + local authorTmp1="${tmp##*/}" + local authorTmp2="${authorTmp1##*:}" + local author="${authorTmp2##*.}" - uniq_path="${author}_${repo}" - [[ $branch ]] && uniq_path="${uniq_path}_${branch}" + uniq_path="${author}_${repo}" + [[ $branch ]] && uniq_path="${uniq_path}_${branch}" } main() { - ## for ql update - show_log="false" - while getopts ":l" opt - do - case $opt in - l) - show_log="true" - ;; - esac - done - [[ "$show_log" == "true" ]] && shift $(($OPTIND - 1)) - - local p1=$1 - local p2=$2 - local p3=$3 - local p4=$4 - local p5=$5 - local p6=$6 - local p7=$7 - local log_time=$(date "+%Y-%m-%d-%H-%M-%S") - local log_path="$dir_log/update/${log_time}_$p1.log" - local begin_time=$(date '+%Y-%m-%d %H:%M:%S') - - case $p1 in - update) - cmd=">> $log_path 2>&1" - [[ "$show_log" == "true" ]] && cmd="" - eval echo -e "## 开始执行... $begin_time\n" $cmd - [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd - eval update_qinglong "$2" $cmd - ;; - extra) - echo -e "## 开始执行... $begin_time\n" >>$log_path - [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path - run_extra_shell >>$log_path - ;; - repo) - get_uniq_path "$p2" "$p6" - if [[ -n $p2 ]]; then - update_repo "$p2" "$p3" "$p4" "$p5" "$p6" "$p7" - else - echo -e "命令输入错误...\n" - usage - fi - ;; - raw) - get_uniq_path "$p2" - if [[ -n $p2 ]]; then - update_raw "$p2" - else - echo -e "命令输入错误...\n" - usage - fi - ;; - rmlog) - echo -e "## 开始执行... $begin_time\n" >>$log_path - [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path - . $dir_shell/rmlog.sh "$p2" >>$log_path - ;; - bot) - echo -e "## 开始执行... $begin_time\n" >>$log_path - [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path - . $dir_shell/bot.sh >>$log_path - ;; - check) - echo -e "## 开始执行... $begin_time\n" >>$log_path - [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path - . $dir_shell/check.sh >>$log_path - ;; - resetlet) - echo -e "## 开始执行... $begin_time\n" >>$log_path - auth_value=$(cat $file_auth_user | jq '.retries =0' -c) - echo -e "重置登录错误次数成功 \n $auth_value" >>$log_path - echo "$auth_value" >$file_auth_user - ;; - resettfa) - echo -e "## 开始执行... $begin_time\n" >>$log_path - auth_value=$(cat $file_auth_user | jq '.twoFactorActivated =false' | jq '.twoFactorActived =false' -c) - echo -e "禁用两步验证成功 \n $auth_value" >>$log_path - echo "$auth_value" >$file_auth_user - ;; - *) - echo -e "命令输入错误...\n" - usage - ;; + ## for ql update + show_log="false" + while getopts ":l" opt; do + case $opt in + l) + show_log="true" + ;; esac - local end_time=$(date '+%Y-%m-%d %H:%M:%S') - local diff_time=$(diff_time "%Y-%m-%d %H:%M:%S" "$begin_time" "$end_time") - if [[ $p1 != "repo" ]] && [[ $p1 != "raw" ]]; then - echo -e "\n## 执行结束... $end_time 耗时 $diff_time 秒" >>$log_path - cat $log_path + done + [[ "$show_log" == "true" ]] && shift $(($OPTIND - 1)) + + local p1=$1 + local p2=$2 + local p3=$3 + local p4=$4 + local p5=$5 + local p6=$6 + local p7=$7 + local log_time=$(date "+%Y-%m-%d-%H-%M-%S") + local log_path="$dir_log/update/${log_time}_$p1.log" + local begin_time=$(date '+%Y-%m-%d %H:%M:%S') + + case $p1 in + update) + cmd=">> $log_path 2>&1" + [[ "$show_log" == "true" ]] && cmd="" + eval echo -e "## 开始执行... $begin_time\n" $cmd + [[ -f $task_error_log_path ]] && eval cat $task_error_log_path $cmd + eval update_qinglong "$2" $cmd + ;; + extra) + echo -e "## 开始执行... $begin_time\n" >>$log_path + [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path + run_extra_shell >>$log_path + ;; + repo) + get_uniq_path "$p2" "$p6" + if [[ -n $p2 ]]; then + update_repo "$p2" "$p3" "$p4" "$p5" "$p6" "$p7" + else + echo -e "命令输入错误...\n" + usage fi + ;; + raw) + get_uniq_path "$p2" + if [[ -n $p2 ]]; then + update_raw "$p2" + else + echo -e "命令输入错误...\n" + usage + fi + ;; + rmlog) + echo -e "## 开始执行... $begin_time\n" >>$log_path + [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path + . $dir_shell/rmlog.sh "$p2" >>$log_path + ;; + bot) + echo -e "## 开始执行... $begin_time\n" >>$log_path + [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path + . $dir_shell/bot.sh >>$log_path + ;; + check) + echo -e "## 开始执行... $begin_time\n" >>$log_path + [[ -f $task_error_log_path ]] && cat $task_error_log_path >>$log_path + . $dir_shell/check.sh >>$log_path + ;; + resetlet) + echo -e "## 开始执行... $begin_time\n" >>$log_path + auth_value=$(cat $file_auth_user | jq '.retries =0' -c) + echo -e "重置登录错误次数成功 \n $auth_value" >>$log_path + echo "$auth_value" >$file_auth_user + ;; + resettfa) + echo -e "## 开始执行... $begin_time\n" >>$log_path + auth_value=$(cat $file_auth_user | jq '.twoFactorActivated =false' | jq '.twoFactorActived =false' -c) + echo -e "禁用两步验证成功 \n $auth_value" >>$log_path + echo "$auth_value" >$file_auth_user + ;; + *) + echo -e "命令输入错误...\n" + usage + ;; + esac + local end_time=$(date '+%Y-%m-%d %H:%M:%S') + local diff_time=$(diff_time "%Y-%m-%d %H:%M:%S" "$begin_time" "$end_time") + if [[ $p1 != "repo" ]] && [[ $p1 != "raw" ]]; then + echo -e "\n## 执行结束... $end_time 耗时 $diff_time 秒" >>$log_path + cat $log_path + fi } main "$@"