kooritea / clash-auto-switch.sh

当节点不可用时自动切换 clash 节点的定时脚本

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

clash-auto-switch

当节点不可用时自动切换 clash 节点的定时脚本

支持设置两个优先级

使用方法

运行你的 clash

编辑 env 文件

# 对应clash的external-controller,不要使用/结尾
api="http://127.0.0.1:9090"

# 对应clash的secret
token=

#代理选择器的项名,脚本只会检查这一项并切换
#clash的config.yaml里面Proxy Group项的name
#只能是英文,如果有中文请先使用sed命令替换
#cat ./config.yaml | sed 's/国外流量/proxy/' > ./config.yaml
selectorName="proxy"

# 用于防止多个脚本同时执行,不理解使用默认路径即可
lockfilepath="/tmp/clash-check.lock"
#记录当前是否处于无可用代理状态,默认即可
recfilepath="/tmp/clash-check-notproxy.lock"

# 优先选择的节点名称
firstProxy=("日本" "3.0|1.0")

# 次级选择节点的关键词,当首选关键词没有匹配到节点或所有节点不可用时,会使用该关键词再次匹配选择
secondProxy=("IPLC|5.0")

#firstProxy和secondProxy的语法规则
# 使用|符号,如"A|B"只需匹配[A]和[B]其中一个关键词
# 使用空格,如
# secondProxy=("A" "B")
# 则同时匹配[A]和[B]两个关键词的节点
# 两种写法可以混合使用,如上面的firstProxy=("日本" "3.0|1.0")
#则会查找所有包含"日本"且包含"3.0"和"1.0"这两个关键词任意一个的节点
# 日本3.0 √
# 日本1.0 √
# 美国3.0 X


# 一些简单的提示的输出,$1是内容
# 不会改默认即可
info(){
	# logger -s "$1" -t "clash-check-proxy" -p 6
	echo $1
}

#无可用代理
whenNotProxy(){
  info "无可用代理"
}

#无可用代理后恢复
whenRecovery(){
  info "代理已恢复,当前节点为:$1"
}


# ....

设置定时循环任务

# cron方式
# 1分钟执行一次
* * * * * /path/clash-auto-switch.sh
# bash方式
while true
do
  /path/clash-auto-switch.sh
  sleep 30s
done

两种方式二选一

别忘了给脚本添加执行权限

chmod +x /path/clash-auto-switch.sh

依赖

  • curl
  • jq

执行逻辑

首先判断当前正在使用的节点是否属于第一优先级节点

  • 是:
    • 是否可用:
      • 是: 退出
      • 否: 寻找新节点
  • 否: 寻找新节点

About

当节点不可用时自动切换 clash 节点的定时脚本


Languages

Language:Shell 100.0%