From c642ca4b8c8d554fbd28c0b02ea4a9607f151f79 Mon Sep 17 00:00:00 2001 From: juewuy Date: Sat, 24 Oct 2020 09:54:14 +0800 Subject: [PATCH] =?UTF-8?q?v1.0.0beta15.3=20~=E4=BC=98=E5=8C=96=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E8=AF=AD=E5=8F=A5=E5=92=8C=E7=BB=93=E6=9E=84=20~?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0wget=E4=B8=8B=E8=BD=BD=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=EF=BC=8C=E7=BB=9F=E4=B8=80=E4=B8=8B=E8=BD=BD=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20~=E5=A2=9E=E5=8A=A0Gitee=E4=B8=8B=E8=BD=BD=E6=BA=90=20~?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=84=9A=E6=9C=AC=E6=97=A5=E5=BF=97=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E6=9F=A5=E7=9C=8B=E6=97=A5=E5=BF=97=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20~=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E5=BC=80=E6=9C=BA=E8=87=AA=E5=90=AF=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/getdate.sh | 49 +++++++++++++++--------- scripts/start.sh | 92 +++++++++++++++++++++++++--------------------- 2 files changed, 82 insertions(+), 59 deletions(-) diff --git a/scripts/getdate.sh b/scripts/getdate.sh index 1af6174..d5ae993 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -2,15 +2,19 @@ # Copyright (C) Juewuy webget(){ - [ -n "$(pidof clash)" ] && export http_proxy="http:/127.0.0.1:$mix_port" #设置临时http代理 + [ -n "$(pidof clash)" ] && export all_proxy="http://127.0.0.1:$mix_port" #设置临时http代理 + #参数【$1】代表下载目录,【$2】代表在线地址 if curl --version > /dev/null 2>&1;then - result=$(curl -w %{http_code} --connect-timeout 5 -# -kLo $1 $2) + [ -z "$3" ] && progress='-#' || progress='-s' + result=$(curl -w %{http_code} --connect-timeout 5 $progress -kLo $1 $2) elif wget --version > /dev/null 2>&1;then - wget -q --show-progress --no-check-certificate --timeout=5 -O $1 $2 + [ -z "$3" ] && progress='--show-progress' || progress='' + wget -Y on -q $progress --no-check-certificate --timeout=5 -O $1 $2 [ $? -eq 0 ] && result="200" else echo 找不到curl或者wget,无法下载,请先安装相应依赖! fi + export all_proxy='' } linkconfig(){ echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -391,7 +395,7 @@ clashlink(){ fi } gettar(){ - result=$(curl -w %{http_code} -skLo /tmp/clashfm.tar.gz $tarurl) + webget /tmp/clashfm.tar.gz $tarurl [ "$result" != "200" ] && echo "文件下载失败!" && exit 1 #解压 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -537,7 +541,7 @@ getcore(){ echo -e "| \033[0m如长时间没有数据请用ctrl+c退出 |" echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\033[0m" #获取在线clash核心文件 - result=$(curl -w %{http_code} -#kLo /tmp/clash.new $corelink) + webget /tmp/clash.new $corelink if [ "$result" != "200" ];then echo ----------------------------------------------- echo -e "\033[31m核心文件下载失败!\033[0m" @@ -565,7 +569,7 @@ getgeo(){ if [ "$res" = '1' ]; then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo 正在从服务器获取数据库文件………… - result=$(curl -w %{http_code} -#kLo /tmp/Country.mmdb $update_url/bin/Country.mmdb) + webget /tmp/Country.mmdb $update_url/bin/Country.mmdb if [ "$result" != "200" ];then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ echo -e "\033[31m文件下载失败!\033[0m" @@ -654,7 +658,7 @@ getdb(){ dblink="${update_url}/bin/${db_type}.tar.gz" echo ----------------------------------------------- echo 正在连接服务器获取安装文件………… - result=$(curl -w %{http_code} -#kLo /tmp/clashdb.tar.gz $dblink) + webget /tmp/clashdb.tar.gz $dblink if [ "$result" != "200" ];then echo ----------------------------------------------- echo -e "\033[31m文件下载失败!\033[0m" @@ -736,22 +740,25 @@ setserver(){ echo -e "\033[30;47m您可以在此处切换在线更新时使用的资源地址\033[0m" echo -e "当前源:\033[4;32m$update_url\033[0m" echo ----------------------------------------------- - echo -e " 1 Github源(直连美国服务器)" - echo -e " 2 Jsdelivr-CDN源(仅同步最新release版本)" - echo -e " 3 Github源+clash代理(需开启clash服务)" - echo -e " 4 自定义输入(请务必确保路径正确)" + echo -e " 1 Jsdelivr-CDN源(test版本)" + echo -e " 2 Jsdelivr-CDN源(release版本)" + echo -e " 3 Github源(test版本,需开启clash服务)" + echo -e " 4 Gitee源(release版本,可能滞后)" + echo -e " 5 自定义输入(请务必确保路径正确)" echo -e " 0 返回上级菜单" read -p "请输入对应数字 > " num if [ -z "$num" ]; then echoerrornum update elif [ "$num" = 1 ]; then - update_url='--resolve raw.githubusercontent.com:443:199.232.68.133 https://raw.githubusercontent.com/juewuy/ShellClash/master' + update_url='https://cdn.jsdelivr.net/gh/juewuy/ShellClash@master' elif [ "$num" = 2 ]; then update_url='https://cdn.jsdelivr.net/gh/juewuy/ShellClash' elif [ "$num" = 3 ]; then - update_url='-x '$authentication'@127.0.0.1:'$mix_port' https://raw.githubusercontent.com/juewuy/ShellClash/master' + update_url='https://raw.githubusercontent.com/juewuy/ShellClash/master' elif [ "$num" = 4 ]; then + update_url='https://gitee.com/juewuy/ShellClash/raw/master' + elif [ "$num" = 5 ]; then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ read -p "请输入个人源路径 > " update_url if [ -z "$update_url" ];then @@ -776,12 +783,15 @@ setserver(){ checkupdate(){ if [ -z "$release_new" ];then if [ "$update_url" = "https://cdn.jsdelivr.net/gh/juewuy/ShellClash" ];then - release_new=$(curl -kfsSL --resolve api.github.com:443:140.82.113.5 --connect-timeout 5 -m 5 "https://api.github.com/repos/juewuy/ShellClash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') + webget /tmp/clashrelease https://api.github.com/repos/juewuy/ShellClash/releases/latest noprogress + [ "$result" = "200" ] && release_new=$(cat /tmp/clashrelease | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g') || release_new=master update_url=$update_url@$release_new fi - curl -skL --connect-timeout 5 -m 5 $update_url/bin/version > /tmp/clashversion - source /tmp/clashversion + webget /tmp/clashversion $update_url/bin/version noprogress + [ "$result" = "200" ] && source /tmp/clashversion || echo -e "\033[31m检查更新失败!\033[0m" [ -z "$release_new" ] && release_new=$versionsh + rm -rf /tmp/clashversion + rm -rf /tmp/clashrelease fi } update(){ @@ -887,6 +897,7 @@ testcommand(){ echo " 5 查看config.yaml前40行" echo " 6 测试代理服务器连通性(google.tw)" echo " 7 重新进入新手引导" + echo " 9 查看后台脚本运行日志" echo ----------------------------------------------- echo " 0 返回上级目录!" read -p "请输入对应数字 > " num @@ -927,7 +938,7 @@ testcommand(){ echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exit; elif [ "$num" = 6 ]; then - echo 注意:测试结果不保证一定准确! + echo 注意:依赖curl,且测试结果不保证一定准确! delay=`curl -kx ${authentication}@127.0.0.1:$mix_port -o /dev/null -s -w '%{time_starttransfer}' 'https://google.tw' & { sleep 3 ; kill $! & }` > /dev/null 2>&1 delay=`echo |awk "{print $delay*1000}"` > /dev/null 2>&1 echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -939,6 +950,10 @@ testcommand(){ clashsh elif [ "$num" = 7 ]; then userguide + elif [ "$num" = 9 ]; then + echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + cat $clashdir/log + exit; else echoerrornum clashsh diff --git a/scripts/start.sh b/scripts/start.sh index faa3217..7722c2b 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -24,37 +24,41 @@ getconfig(){ #是否代理常用端口 [ "$common_ports" = "已开启" ] && ports='-m multiport --dports 53,587,465,995,993,143,80,443 ' } +logger(){ + echo -e "\033[31m$1\033[0m" + echo `date "+%G-%m-%d %H:%M:%S"` $1 >> $clashdir/log + [ "$(wc -l $clashdir/log | awk '{print $1}')" -gt 30 ] && sed -i '1d' $clashdir/log +} getyaml(){ #前后端订阅服务器地址索引,可在此处添加! Server=`sed -n ""$server_link"p"< /dev/null 2>&1 - result=$(curl -w %{http_code} -kLo $yamlnew $Https) + rm -rf $yamlnew + source $clashdir/getdate.sh && webget $yamlnew $Https if [ "$result" != "200" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - echo -e "\033[31m配置文件获取失败!\033[0m" if [ -z "$markhttp" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - echo -e "\033[31m请尝试使用【导入节点/链接】功能!\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- + logger "配置文件获取失败!" + echo -e "\033[31m请尝试使用【导入订阅】功能!\033[0m" + echo ----------------------------------------------- exit 1 else if [ "$retry" -ge 5 ];then - echo -e "\033[32m无法获取配置文件,请检查链接格式以及网络连接状态!\033[0m" + logger "无法获取配置文件,请检查链接格式以及网络连接状态!" exit 1 else retry=$((retry+1)) echo -e "\033[32m尝试使用其他服务器获取配置!\033[0m" - echo -e "\033[33m正在尝试第$retry次/共5次!\033[0m" + logger "正在尝试第$retry次/共5次!" sed -i '/server_link=*/'d $ccfg if [ "$server_link" -ge 5 ]; then server_link=0 @@ -100,7 +103,7 @@ getyaml(){ #检测节点 if [ -z "$(cat $yamlnew | grep 'server:' | grep -v 'nameserver')" ];then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - echo -e "\033[33m获取到了配置文件,但似乎并不包含正确的节点信息!\033[0m" + logger "获取到了配置文件,但似乎并不包含正确的节点信息!" echo ----------------------------------------------- sed -n '1,30p' $yamlnew echo ----------------------------------------------- @@ -111,7 +114,7 @@ getyaml(){ #检测旧格式 if cat $yamlnew | grep 'Proxy Group:' >/dev/null;then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - echo -e "\033[31m已经停止对旧格式配置文件的支持!!!\033[0m" + logger "已经停止对旧格式配置文件的支持!!!" echo -e "请使用新格式或者使用【导入节点/链接】功能!" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exit 1 @@ -119,7 +122,7 @@ getyaml(){ #检测不支持的加密协议 if cat $yamlnew | grep 'cipher: chacha20,' >/dev/null;then echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - echo -e "\033[31m不支持chacha20加密,请更换节点加密协议!!!\033[0m" + logger "不支持chacha20加密,请更换节点加密协议!!!" echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exit 1 fi @@ -137,11 +140,11 @@ getyaml(){ $clashdir/start.sh stop mv $yaml.bak $yaml $0 start - echo -e "\033[31mclash服务启动失败!已还原配置文件并重启clash!\033[0m" + logger "clash服务启动失败!已还原配置文件并重启clash!" sleep 1 [ -n "$(pidof clash)" ] && exit 0 fi - echo -e "\033[31mclash服务启动失败!请查看报错信息!\033[0m" + logger "clash服务启动失败!请查看报错信息!" $0 stop $clashdir/clash -t -d $clashdir echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -327,17 +330,19 @@ afstart(){ #读取配置文件 getconfig #修改iptables规则使流量进入clash - stop_iptables [ "$redir_mod" != "纯净模式" ] && [ "$dns_no" != "true" ] && start_dns [ "$redir_mod" != "纯净模式" ] && [ "$redir_mod" != "Tun模式" ] && start_redir #标记启动时间 mark_time #设置本机代理 [ "$local_proxy" = "已开启" ] && $0 set_proxy $mix_port $hostdir - #启用面板配置自动保存 - web_save_auto - #后台还原面板配置 - [ -f $clashdir/web_save ] && web_restore & + #还原面板配置相关 + if curl --version > /dev/null 2>&1;then + web_save_auto #启用面板配置自动保存 + [ -f $clashdir/web_save ] && web_restore & #后台还原面板配置 + fi + #clash启动校验 + [ -z "$(pidof clash)" ] && logger clash启动失败! && $0 stop && exit 0 } case "$1" in @@ -346,6 +351,7 @@ afstart) afstart ;; start) + [ -n "$(pidof clash)" ] && logger clash服务已经运行,请勿重复运行! && exit 0 #读取配置文件 getconfig #使用内置规则强行覆盖config配置文件 @@ -366,7 +372,9 @@ stop) #读取配置文件 getconfig #保存面板配置 - web_save + if curl --version > /dev/null 2>&1;then + web_save + fi #删除守护进程&面板配置自动保存 sed -i /clash保守模式守护进程/d $cronpath >/dev/null 2>&1 sed -i /保存节点配置/d $cronpath >/dev/null 2>&1