From b5d0f90780335b0f3d151a6aaaf1e1e17ea7f345 Mon Sep 17 00:00:00 2001 From: vernesong <42875168+vernesong@users.noreply.github.com> Date: Fri, 22 Jan 2021 17:44:26 +0800 Subject: [PATCH] OpenClash: add auto restart support Signed-off-by: CN_SZTL --- .../model/cbi/openclash/other-rules-edit.lua | 4 +++ .../luasrc/model/cbi/openclash/settings.lua | 27 +++++++++++++++++++ .../po/zh-cn/openclash.zh-cn.po | 15 +++++++++++ .../root/etc/init.d/openclash | 27 +++++++++---------- .../usr/share/openclash/yml_proxys_set.sh | 2 +- 5 files changed, 60 insertions(+), 15 deletions(-) diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua index 9e2f35fd98..b66002523d 100644 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua +++ b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/other-rules-edit.lua @@ -36,6 +36,10 @@ s = m:section(NamedSection, sid, "other_rules") s.anonymous = true s.addremove = false +o = s:option(Value, "Note", translate("Note")) +o.default = "default" +o.rmempty = false + o = s:option(ListValue, "config", translate("Config File")) local e,a={} local groupnames,filename diff --git a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua index f12c59e065..57b333c31f 100644 --- a/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua +++ b/package/ctcgfw/luci-app-openclash/luasrc/model/cbi/openclash/settings.lua @@ -34,6 +34,7 @@ s:tab("dashboard", translate("Dashboard Settings")) s:tab("rules_update", translate("Rules Update")) s:tab("geo_update", translate("GEOIP Update")) s:tab("chnr_update", translate("Chnroute Update")) +s:tab("auto_restart", translate("Auto Restart")) s:tab("version_update", translate("Version Update")) s:tab("debug", translate("Debug Logs")) @@ -469,6 +470,27 @@ o.write = function() end end +o = s:taboption("auto_restart", Flag, "auto_restart", translate("Auto Restart")) +o.description = translate("Auto Restart OpenClash") +o.default=0 + +o = s:taboption("auto_restart", ListValue, "auto_restart_week_time", translate("Restart Time (Every Week)")) +o:value("*", translate("Every Day")) +o:value("1", translate("Every Monday")) +o:value("2", translate("Every Tuesday")) +o:value("3", translate("Every Wednesday")) +o:value("4", translate("Every Thursday")) +o:value("5", translate("Every Friday")) +o:value("6", translate("Every Saturday")) +o:value("0", translate("Every Sunday")) +o.default=1 + +o = s:taboption("auto_restart", ListValue, "auto_restart_day_time", translate("Restart time (every day)")) +for t = 0,23 do +o:value(t, t..":00") +end +o.default=0 + ---- Dashboard Settings local lan_ip=SYS.exec("uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null |tr -d '\n'") local cn_port=SYS.exec("uci get openclash.config.cn_port 2>/dev/null |tr -d '\n'") @@ -593,6 +615,11 @@ function o.cfgvalue(...) end end +o = ss:option(DummyValue, "Note", translate("Note")) +function o.cfgvalue(...) + return Value.cfgvalue(...) or translate("None") +end + -- [[ Edit Authentication ]] -- s = m:section(TypedSection, "authentication", translate("Set Authentication of SOCKS5/HTTP(S)")) s.anonymous = true diff --git a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po index 0fb33bd8b3..02a7727ecd 100644 --- a/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po +++ b/package/ctcgfw/luci-app-openclash/po/zh-cn/openclash.zh-cn.po @@ -1424,3 +1424,18 @@ msgstr "选择配置文件后请点击以获取对应的策略组" msgid "Other Rules Name" msgstr "第三方规则" + +msgid "Note" +msgstr "备注" + +msgid "Auto Restart" +msgstr "定时重启" + +msgid "Auto Restart OpenClash" +msgstr "定时重启插件" + +msgid "Restart Time (Every Week)" +msgstr "重启时间(每周)" + +msgid "Restart time (every day)" +msgstr "重启时间(每天)" \ No newline at end of file diff --git a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash index 01cca803da..21fad97232 100755 --- a/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash +++ b/package/ctcgfw/luci-app-openclash/root/etc/init.d/openclash @@ -48,6 +48,9 @@ add_cron() [ -z "$(grep "openclash_chnroute.sh" "$CRON_FILE" 2>/dev/null)" ] && { [ "$(uci get openclash.config.chnr_auto_update 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.chnr_update_day_time 2>/dev/null) * * $(uci get openclash.config.chnr_update_week_time 2>/dev/null) /usr/share/openclash/openclash_chnroute.sh" >> $CRON_FILE } + [ -z "$(grep "/etc/init.d/openclash" "$CRON_FILE" 2>/dev/null)" ] && { + [ "$(uci get openclash.config.auto_restart 2>/dev/null)" -eq 1 ] && echo "0 $(uci get openclash.config.auto_restart_day_time 2>/dev/null) * * $(uci get openclash.config.auto_restart_week_time 2>/dev/null) /etc/init.d/openclash restart 2>/dev/null" >> $CRON_FILE + } crontab $CRON_FILE nohup /usr/share/openclash/openclash_watchdog.sh & } @@ -1291,11 +1294,13 @@ fi fi #common ports -common_port="21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889" -ipset create common_ports bitmap:port range 0-65535 -for i in $common_port; do - ipset add common_ports $i -done +if [ "$common_ports" = "1" ]; then + common_port="21 22 23 53 80 123 143 194 443 465 587 853 993 995 998 2052 2053 2082 2083 2086 2095 2096 5222 5228 5229 5230 8080 8443 8880 8888 8889" + ipset create common_ports bitmap:port range 0-65535 + for i in $common_port; do + ipset add common_ports $i + done +fi if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then #tcp @@ -1308,9 +1313,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then iptables -t nat -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 iptables -t nat -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - if [ "$common_ports" = "1" ]; then - iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi + iptables -t nat -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 iptables -t nat -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t nat -A openclash -p tcp -j REDIRECT --to-ports "$proxy_port" @@ -1333,9 +1336,7 @@ if [ -z "$en_mode_tun" ] || [ "$en_mode_tun" -eq 3 ]; then iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - if [ "$common_ports" = "1" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi + iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t mangle -A openclash -p udp --dport 53 -j RETURN >/dev/null 2>&1 @@ -1444,9 +1445,7 @@ if [ -n "$en_mode_tun" ]; then iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_ips src -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set ! --match-set lan_ac_white_macs src -j RETURN >/dev/null 2>&1 if [ "$en_mode" = "redir-host" ]; then - if [ "$common_ports" = "1" ]; then - iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 - fi + iptables -t mangle -A openclash -m set ! --match-set common_ports dst -j RETURN >/dev/null 2>&1 iptables -t mangle -A openclash -m set --match-set china_ip_route dst -j RETURN >/dev/null 2>&1 fi iptables -t mangle -A openclash -j MARK --set-mark "$PROXY_FWMARK" diff --git a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh index a2d76b39ea..4827a1af70 100755 --- a/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh +++ b/package/ctcgfw/luci-app-openclash/root/usr/share/openclash/yml_proxys_set.sh @@ -48,7 +48,7 @@ yml_other_rules_del() if [ "$enabled" = "0" ] || [ "$config" != "$2" ] || [ "$rule_name" != "$3" ]; then return else - uci delete openclash."$section" 2>/dev/null + uci set openclash."$section".enabled=0 2>/dev/null fi } #写入代理集到配置文件