mirror of
				https://github.com/whyour/qinglong.git
				synced 2025-10-31 17:06:07 +08:00 
			
		
		
		
	添加系统资源消耗提示
This commit is contained in:
		
							parent
							
								
									654b51e476
								
							
						
					
					
						commit
						5530ce76e3
					
				
							
								
								
									
										320
									
								
								shell/api.sh
									
									
									
									
									
								
							
							
						
						
									
										320
									
								
								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 | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
|  | @ -29,4 +29,4 @@ git tag -a "$version" -m "release $version" | |||
| echo -e "提交tag" | ||||
| git push --tags | ||||
| 
 | ||||
| echo -e "完成发布" | ||||
| echo -e "完成发布" | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										598
									
								
								shell/share.sh
									
									
									
									
									
								
							
							
						
						
									
										598
									
								
								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 | ||||
|  |  | |||
							
								
								
									
										563
									
								
								shell/task.sh
									
									
									
									
									
								
							
							
						
						
									
										563
									
								
								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 <file_name>                                             # 依次执行,如果设置了随机延迟,将随机延迟一定秒数" | ||||
|     echo -e "2.$cmd_task <file_name> now                                         # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中" | ||||
|     echo -e "3.$cmd_task <file_name> conc <环境变量名称> <账号编号,空格分隔>(可选的)  # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中,且可指定账号执行" | ||||
|     echo -e "4.$cmd_task <file_name> 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 <file_name>                                             # 依次执行,如果设置了随机延迟,将随机延迟一定秒数" | ||||
|   echo -e "2.$cmd_task <file_name> now                                         # 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日志,同时记录在日志文件中" | ||||
|   echo -e "3.$cmd_task <file_name> conc <环境变量名称> <账号编号,空格分隔>(可选的)  # 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日志,直接记录在日志文件中,且可指定账号执行" | ||||
|   echo -e "4.$cmd_task <file_name> 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 "$@" | ||||
|  |  | |||
							
								
								
									
										787
									
								
								shell/update.sh
									
									
									
									
									
								
							
							
						
						
									
										787
									
								
								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 <fileurl>                                                           # 更新单个脚本文件" | ||||
|     echo -e "4. $cmd_update repo <repourl> <path> <blacklist> <dependence> <branch> <extensions>    # 更新单个仓库的脚本" | ||||
|     echo -e "5. $cmd_update rmlog <days>                                                            # 删除旧日志" | ||||
|     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 <fileurl>                                                           # 更新单个脚本文件" | ||||
|   echo -e "4. $cmd_update repo <repourl> <path> <blacklist> <dependence> <branch> <extensions>    # 更新单个仓库的脚本" | ||||
|   echo -e "5. $cmd_update rmlog <days>                                                            # 删除旧日志" | ||||
|   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 "$@" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 whyour
						whyour