123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618 |
- #!/bin/sh /etc/rc.common
- USE_PROCD=1
- START=95
- STOP=01
- CONFIGURATION=AdGuardHome
- CRON_FILE=/etc/crontabs/root
- EXTRA_COMMANDS="do_redirect testbackup test_crontab force_reload isrunning"
- EXTRA_HELP=" do_redirect 0 or 1\
- testbackup backup or restore\
- test_crontab
- force_reload
- isrunning"
- set_forward_dnsmasq()
- {
- local PORT="$1"
- addr="127.0.0.1#$PORT"
- OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
- echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
- if [ $? -eq 0 ]; then
- return
- fi
- uci delete dhcp.@dnsmasq[0].server 2>/dev/null
- uci add_list dhcp.@dnsmasq[0].server=$addr
- for server in $OLD_SERVER; do
- if [ "$server" = "$addr" ]; then
- continue
- fi
- uci add_list dhcp.@dnsmasq[0].server=$server
- done
- uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null
- uci set dhcp.@dnsmasq[0].noresolv=1
- uci commit dhcp
- /etc/init.d/dnsmasq restart
- }
- stop_forward_dnsmasq()
- {
- local OLD_PORT="$1"
- addr="127.0.0.1#$OLD_PORT"
- OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
- echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
- if [ $? -ne 0 ]; then
- return
- fi
- uci del_list dhcp.@dnsmasq[0].server=$addr 2>/dev/null
- addrlist="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
- if [ -z "$addrlist" ] ; then
- uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto 2>/dev/null
- uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null
- fi
- uci commit dhcp
- /etc/init.d/dnsmasq restart
- }
- set_iptable()
- {
- local ipv6_server=$1
- local tcp_server=$2
- uci -q batch <<-EOF >/dev/null 2>&1
- delete firewall.AdGuardHome
- set firewall.AdGuardHome=include
- set firewall.AdGuardHome.type=script
- set firewall.AdGuardHome.path=/usr/share/AdGuardHome/firewall.start
- set firewall.AdGuardHome.reload=1
- commit firewall
- EOF
- IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
- for IP in $IPS
- do
- if [ "$tcp_server" == "1" ]; then
- iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
- fi
- iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
- done
- if [ "$ipv6_server" == 0 ]; then
- return
- fi
- IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
- for IP in $IPS
- do
- if [ "$tcp_server" == "1" ]; then
- ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
- fi
- ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
- done
- }
- clear_iptable()
- {
- uci -q batch <<-EOF >/dev/null 2>&1
- delete firewall.AdGuardHome
- commit firewall
- EOF
- local OLD_PORT="$1"
- local ipv6_server=$2
- IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
- for IP in $IPS
- do
- iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
- iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
- done
- if [ "$ipv6_server" == 0 ]; then
- return
- fi
- echo "warn ip6tables nat mod is needed"
- IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
- for IP in $IPS
- do
- ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
- ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
- done
- }
- service_triggers() {
- procd_add_reload_trigger "$CONFIGURATION"
- [ "$(uci get AdGuardHome.AdGuardHome.redirect)" == "redirect" ] && procd_add_reload_trigger firewall
- }
- isrunning(){
- config_load "${CONFIGURATION}"
- _isrunning
- local r=$?
- ([ "$r" == "0" ] && echo "running") || ([ "$r" == "1" ] && echo "not run" ) || echo "no bin"
- return $r
- }
- _isrunning(){
- config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome/AdGuardHome"
- [ ! -f "$binpath" ] && return 2
- pgrep $binpath 2>&1 >/dev/null && return 0
- return 1
- }
- force_reload(){
- config_load "${CONFIGURATION}"
- _isrunning && procd_send_signal "$CONFIGURATION" || start
- }
- get_tz()
- {
- SET_TZ=""
- if [ -e "/etc/localtime" ]; then
- return
- fi
- for tzfile in /etc/TZ /var/etc/TZ
- do
- if [ ! -e "$tzfile" ]; then
- continue
- fi
- tz="`cat $tzfile 2>/dev/null`"
- done
- if [ -z "$tz" ]; then
- return
- fi
- SET_TZ=$tz
- }
- rm_port53()
- {
- local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
- dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
- if [ -z "$dnsmasq_port" ]; then
- dnsmasq_port="53"
- fi
- if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then
- if [ "$dnsmasq_port" == "53" ]; then
- dnsmasq_port="1745"
- fi
- elif [ "$dnsmasq_port" == "53" ]; then
- return
- fi
- config_editor "dns.port" "$dnsmasq_port" "$configpath"
- uci set dhcp.@dnsmasq[0].port="53"
- uci commit dhcp
- /etc/init.d/dnsmasq reload
- }
- use_port53()
- {
- local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
- dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
- if [ -z "$dnsmasq_port" ]; then
- dnsmasq_port="53"
- fi
- if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then
- if [ "$dnsmasq_port" == "53" ]; then
- AdGuardHome_PORT="1745"
- fi
- elif [ "$AdGuardHome_PORT" == "53" ]; then
- return
- fi
- config_editor "dns.port" "53" "$configpath"
- uci set dhcp.@dnsmasq[0].port="$AdGuardHome_PORT"
- uci commit dhcp
- /etc/init.d/dnsmasq reload
- }
- do_redirect()
- {
- config_load "${CONFIGURATION}"
- _do_redirect $1
- }
- _do_redirect()
- {
- local section="$CONFIGURATION"
- args=""
- ipv6_server=1
- tcp_server=0
- enabled=$1
- if [ "$enabled" == "1" ]; then
- echo -n "1">/var/run/AdGredir
- else
- echo -n "0">/var/run/AdGredir
- fi
- config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
- AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
- if [ -z "$AdGuardHome_PORT" ]; then
- AdGuardHome_PORT="0"
- fi
- config_get "redirect" "$section" "redirect" "none"
- config_get "old_redirect" "$section" "old_redirect" "none"
- config_get "old_port" "$section" "old_port" "0"
- config_get "old_enabled" "$section" "old_enabled" "0"
- uci get dhcp.@dnsmasq[0].port >/dev/null 2>&1 || uci set dhcp.@dnsmasq[0].port="53" >/dev/null 2>&1
- if [ "$old_enabled" = "1" -a "$old_redirect" == "exchange" ]; then
- AdGuardHome_PORT=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
- fi
- if [ "$old_redirect" != "$redirect" ] || [ "$old_port" != "$AdGuardHome_PORT" ] || [ "$old_enabled" = "1" -a "$enabled" = "0" ]; then
- if [ "$old_redirect" != "none" ]; then
- if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then
- clear_iptable "$old_port" "$ipv6_server"
- elif [ "$old_redirect" == "dnsmasq-upstream" ]; then
- stop_forward_dnsmasq "$old_port"
- elif [ "$old_redirect" == "exchange" ]; then
- rm_port53
- fi
- fi
- elif [ "$old_enabled" = "1" -a "$enabled" = "1" ]; then
- if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then
- clear_iptable "$old_port" "$ipv6_server"
- fi
- fi
- uci delete AdGuardHome.@AdGuardHome[0].old_redirect 2>/dev/null
- uci delete AdGuardHome.@AdGuardHome[0].old_port 2>/dev/null
- uci delete AdGuardHome.@AdGuardHome[0].old_enabled 2>/dev/null
- uci add_list AdGuardHome.@AdGuardHome[0].old_redirect="$redirect" 2>/dev/null
- uci add_list AdGuardHome.@AdGuardHome[0].old_port="$AdGuardHome_PORT" 2>/dev/null
- uci add_list AdGuardHome.@AdGuardHome[0].old_enabled="$enabled" 2>/dev/null
- uci commit AdGuardHome
- [ "$enabled" == "0" ] && return 1
- if [ "$AdGuardHome_PORT" == "0" ]; then
- return 1
- fi
- if [ "$redirect" = "redirect" ]; then
- set_iptable $ipv6_server $tcp_server
- elif [ "$redirect" = "dnsmasq-upstream" ]; then
- set_forward_dnsmasq "$AdGuardHome_PORT"
- elif [ "$redirect" == "exchange" -a "$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)" == "53" ]; then
- use_port53
- fi
- }
- get_filesystem()
- {
- # print out path filesystem
- echo $1 | awk '
- BEGIN{
- while (("mount"| getline ret) > 0)
- {
- split(ret,d);
- fs[d[3]]=d[5];
- m=index(d[1],":")
- if (m==0)
- {
- pt[d[3]]=d[1]
- }else{
- pt[d[3]]=substr(d[1],m+1)
- }}}{
- split($0,d,"/");
- if ("/" in fs)
- {
- result1=fs["/"];
- }
- if ("/" in pt)
- {
- result2=pt["/"];
- }
- for (i=2;i<=length(d);i++)
- {
- p[i]=p[i-1]"/"d[i];
- if (p[i] in fs)
- {
- result1=fs[p[i]];
- result2=pt[p[i]];
- }
- }
- if (result2 in fs){
- result=fs[result2]}
- else{
- result=result1}
- print(result);}'
- }
- config_editor()
- {
- awk -v yaml="$1" -v value="$2" -v file="$3" -v ro="$4" '
- BEGIN{split(yaml,part,"\.");s="";i=1;l=length(part);}
- {
- if (match($0,s""part[i]":"))
- {
- if (i==l)
- {
- split($0,t,": ");
- if (ro==""){
- system("sed -i '\''"FNR"c \\"t[1]": "value"'\'' "file);
- }else{
- print(t[2]);
- }
- exit;
- }
- s=s"[- ]{2}";
- i++;
- }
- }' $3
- }
- boot_service() {
- rm /var/run/AdGserverdis >/dev/null 2>&1
- config_load "${CONFIGURATION}"
- config_get waitonboot $CONFIGURATION waitonboot "0"
- config_get_bool enabled $CONFIGURATION enabled 0
- config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome/AdGuardHome"
- [ -f "$binpath" ] && start_service
- if [ "$enabled" == "1" ] && [ "$waitonboot" == "1" ]; then
- procd_open_instance "waitnet"
- procd_set_param command "/usr/share/AdGuardHome/waitnet.sh"
- procd_close_instance
- echo "no net start pinging"
- fi
- }
- testbackup(){
- config_load "${CONFIGURATION}"
- if [ "$1" == "backup" ]; then
- backup
- elif [ "$1" == "restore" ]; then
- restore
- fi
- }
- restore()
- {
- config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
- config_get backupwdpath $CONFIGURATION backupwdpath "/usr/bin/AdGuardHome"
- cp -u -r -f $backupwdpath/data $workdir
- }
- backup() {
- config_get backupwdpath $CONFIGURATION backupwdpath "/usr/bin/AdGuardHome"
- mkdir -p $backupwdpath/data
- config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
- config_get backupfile $CONFIGURATION backupfile ""
- for one in $backupfile;
- do
- while :
- do
- if [ -d "$backupwdpath/data/$one" ]; then
- cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data 2>&1)
- else
- cpret=$(cp -u -r -f $workdir/data/$one $backupwdpath/data/$one 2>&1)
- fi
- echo "$cpret"
- echo "$cpret" | grep "no space left on device"
- if [ "$?" == "0" ]; then
- echo "磁盘已满,删除log重试中"
- del_querylog && continue
- rm -f -r $backupwdpath/data/filters
- rm -f -r $workdir/data/filters && continue
- echo "backup failed"
- fi
- break
- done
- done
- }
- start_service() {
- # Reading config
- rm /var/run/AdGserverdis >/dev/null 2>&1
- config_load "${CONFIGURATION}"
- # update password
- config_get hashpass $CONFIGURATION hashpass ""
- config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
- if [ -n "$hashpass" ]; then
- config_editor "users.password" "$hashpass" "$configpath"
- uci set $CONFIGURATION.$CONFIGURATION.hashpass=""
- fi
- local enabled
- config_get_bool enabled $CONFIGURATION enabled 0
- # update crontab
- do_crontab
- if [ "$enabled" == "0" ]; then
- _do_redirect 0
- return
- fi
- #what need to do before reload
- config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
- config_get backupfile $CONFIGURATION backupfile ""
- mkdir -p $workdir/data
- if [ -n "$backupfile" ] && [ ! -d "$workdir/data" ]; then
- restore
- fi
- # for overlay data-stk-oo not suppport
- local cwdfs=$(get_filesystem $workdir)
- echo "workdir is a $cwdfs filesystem"
- if [ "$cwdfs" == "jffs2" ]; then
- echo "fs error ln db to tmp $workdir $cwdfs"
- logger "AdGuardHome" "warning db redirect to tmp"
- touch $workdir/data/stats.db
- if [ ! -L $workdir/data/stats.db ]; then
- mv -f $workdir/data/stats.db /tmp/stats.db 2>/dev/null
- ln -s /tmp/stats.db $workdir/data/stats.db 2>/dev/null
- fi
- touch $workdir/data/sessions.db
- if [ ! -L $workdir/data/sessions.db ]; then
- mv -f $workdir/data/sessions.db /tmp/sessions.db 2>/dev/null
- ln -s /tmp/sessions.db $workdir/data/sessions.db 2>/dev/null
- fi
- fi
- local ADDITIONAL_ARGS=""
- config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome/AdGuardHome"
- mkdir -p ${binpath%/*}
- ADDITIONAL_ARGS="$ADDITIONAL_ARGS -c $configpath"
- ADDITIONAL_ARGS="$ADDITIONAL_ARGS -w $workdir"
- config_get httpport $CONFIGURATION httpport 3000
- ADDITIONAL_ARGS="$ADDITIONAL_ARGS -p $httpport"
- # hack to save config file when upgrade system
- config_get upprotect $CONFIGURATION upprotect ""
- eval upprotect=${upprotect// /\\\\n}
- echo -e "$upprotect">/lib/upgrade/keep.d/luci-app-adguardhome
-
- config_get logfile $CONFIGURATION logfile ""
- if [ -n "$logfile" ]; then
- ADDITIONAL_ARGS="$ADDITIONAL_ARGS -l $logfile"
- fi
- if [ ! -f "$binpath" ]; then
- _do_redirect 0
- /usr/share/AdGuardHome/update_core.sh 2>&1 >/tmp/AdGuardHome_update.log &
- exit 0
- fi
- config_get_bool verbose $CONFIGURATION verbose 0
- if [ "$verbose" -eq 1 ]; then
- ADDITIONAL_ARGS="$ADDITIONAL_ARGS -v"
- fi
- procd_open_instance
- get_tz
- if [ -n "$SET_TZ" ]; then
- procd_set_param env TZ="$SET_TZ"
- fi
- procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
- procd_set_param limits core="unlimited" nofile="65535 65535"
- procd_set_param stderr 1
- procd_set_param command $binpath $ADDITIONAL_ARGS
- procd_set_param file "$configpath" "/etc/hosts" "/etc/config/AdGuardHome"
- procd_close_instance
- if [ -f "$configpath" ]; then
- _do_redirect 1
- else
- _do_redirect 0
- config_get "redirect" "AdGuardHome" "redirect" "none"
- if [ "$redirect" != "none" ]; then
- procd_open_instance "waitconfig"
- procd_set_param command "/usr/share/AdGuardHome/watchconfig.sh"
- procd_close_instance
- echo "no config start watching"
- fi
- fi
- echo "AdGuardHome service enabled"
- echo "luci enable switch=$enabled"
- (sleep 10 && [ -z "$(pgrep $binpath)" ] && logger "AdGuardHome" "no process in 10s cancel redirect" && _do_redirect 0 )&
- }
- reload_service()
- {
- rm /var/run/AdGlucitest >/dev/null 2>&1
- echo "AdGuardHome reloading"
- start
- }
- del_querylog(){
- local btarget=$(ls $backupwdpath/data | grep -F "querylog.json" | sort -r | head -n 1)
- local wtarget=$(ls $workdir/data | grep -F "querylog.json" | sort -r | head -n 1)
- if [ "$btarget"x == "$wtarget"x ]; then
- [ -z "$btarget" ] && return 1
- rm -f $workdir/data/$wtarget
- rm -f $backupwdpath/data/$btarget
- return 0
- fi
- if [ "$btarget" \> "$wtarget" ]; then
- rm -f $backupwdpath/data/$btarget
- return 0
- else
- rm -f $workdir/data/$wtarget
- return 0
- fi
- }
- stop_service()
- {
- config_load "${CONFIGURATION}"
- _do_redirect 0
- do_crontab
- if [ "$1" != "nobackup" ]; then
- config_get backupfile $CONFIGURATION backupfile "0"
- if [ -n "$backupfile" ]; then
- backup
- fi
- fi
- echo "AdGuardHome service disabled"
- touch /var/run/AdGserverdis
- }
- boot() {
- rc_procd boot_service "$@"
- if eval "type service_started" 2>/dev/null >/dev/null; then
- service_started
- fi
- }
- test_crontab(){
- config_load "${CONFIGURATION}"
- do_crontab
- }
- do_crontab(){
- config_get_bool enabled $CONFIGURATION enabled 0
- config_get crontab $CONFIGURATION crontab ""
- local findstr default cronenable replace commit
- local cronreload=0
- local commit=0
- findstr="/usr/share/AdGuardHome/update_core.sh"
- default="30 3 * * * /usr/share/AdGuardHome/update_core.sh 2>&1"
- [ "$enabled" == "0" ] || [ "${crontab//autoupdate/}" == "$crontab" ] && cronenable=0 || cronenable=1
- crontab_editor
-
- config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
- config_get lastworkdir $CONFIGURATION lastworkdir "/usr/bin/AdGuardHome"
- findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json"
- #[ -n "$lastworkdir" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastworkdir/data/querylog.json" && [ "$lastworkdir" != "$workdir" ] && replace="${lastworkdir//\//\\/}/${workdir//\//\\/}"
- default="0 * * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.workdir)/data/querylog.json"
- [ "$enabled" == "0" ] || [ "${crontab//cutquerylog/}" == "$crontab" ] && cronenable=0 || cronenable=1
- crontab_editor
- #[ "$lastworkdir" != "$workdir" ] && uci set AdGuardHome.AdGuardHome.lastworkdir="$workdir" && commit=1
-
- config_get logfile $CONFIGURATION logfile ""
- config_get lastlogfile $CONFIGURATION lastlogfile ""
- findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* \$(uci get AdGuardHome.AdGuardHome.logfile)"
- default="30 3 * * * /usr/share/AdGuardHome/tailto.sh 2000 \$(uci get AdGuardHome.AdGuardHome.logfile)"
- #[ -n "$lastlogfile" ] && findstr="/usr/share/AdGuardHome/tailto.sh [0-9]* $lastlogfile" && [ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && replace="${lastlogfile//\//\\/}/${logfile//\//\\/}"
- [ "$logfile" == "syslog" ] || [ "$logfile" == "" ] || [ "$enabled" == "0" ] || [ "${crontab//cutruntimelog/}" == "$crontab" ] && cronenable=0 || cronenable=1
- crontab_editor
- #[ -n "$logfile" ] && [ "$lastlogfile" != "$logfile" ] && uci set AdGuardHome.AdGuardHome.lastlogfile="$logfile" && commit=1
-
- findstr="/usr/share/AdGuardHome/addhost.sh"
- default="0 * * * * /usr/share/AdGuardHome/addhost.sh"
- [ "$enabled" == "0" ] || [ "${crontab//autohost/}" == "$crontab" ] && cronenable=0 || cronenable=1
- crontab_editor
- [ "$cronenable" == "0" ] && /usr/share/AdGuardHome/addhost.sh "del" "noreload" || /usr/share/AdGuardHome/addhost.sh "" "noreload"
- findstr="/usr/share/AdGuardHome/gfw2adg.sh"
- default="30 3 * * * /usr/share/AdGuardHome/gfw2adg.sh"
- [ "$enabled" == "0" ] || [ "${crontab//autogfw/}" == "$crontab" ] && cronenable=0 || cronenable=1
- crontab_editor
- [ "$cronreload" -gt 0 ] && /etc/init.d/cron restart
- #[ "$commit" -gt 0 ] && uci commit AdGuardHome
- }
- crontab_editor(){
- #usage input:
- #findstr=
- #default=
- #cronenable=
- #replace="${last//\//\\/}/${now//\//\\/}"
- #output:cronreload:if >1 please /etc/init.d/cron restart manual
- local testline reload
- local line="$(grep "$findstr" $CRON_FILE)"
- [ -n "$replace" ] && [ -n "$line" ] && eval testline="\${line//$replace}" && [ "$testline" != "$line" ] && line="$testline" && reload="1" && replace=""
- if [ "${line:0:1}" != "#" ]; then
- if [ $cronenable -eq 1 ]; then
- [ -z "$line" ] && line="$default" && reload="1"
- if [ -n "$reload" ]; then
- sed -i "\,$findstr,d" $CRON_FILE
- echo "$line" >> $CRON_FILE
- cronreload=$((cronreload+1))
- fi
- elif [ -n "$line" ]; then
- sed -i "\,$findstr,d" $CRON_FILE
- echo "#$line" >> $CRON_FILE
- cronreload=$((cronreload+1))
- fi
- else
- if [ $cronenable -eq 1 ]; then
- sed -i "\,$findstr,d" $CRON_FILE
- echo "${line:1}" >> $CRON_FILE
- cronreload=$((cronreload+1))
- elif [ -z "$reload" ]; then
- sed -i "\,$findstr,d" $CRON_FILE
- echo "$line" >> $CRON_FILE
- fi
- fi
-
- }
|