AdGuardHome 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. #!/bin/sh /etc/rc.common
  2. USE_PROCD=1
  3. START=95
  4. STOP=01
  5. CONFIGURATION=AdGuardHome
  6. CRON_FILE=/etc/crontabs/root
  7. EXTRA_COMMANDS="do_redirect"
  8. EXTRA_HELP=" do_redirect 0 or 1"
  9. set_forward_dnsmasq()
  10. {
  11. local PORT="$1"
  12. addr="127.0.0.1#$PORT"
  13. OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
  14. echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
  15. if [ $? -eq 0 ]; then
  16. return
  17. fi
  18. uci delete dhcp.@dnsmasq[0].server 2>/dev/null
  19. uci add_list dhcp.@dnsmasq[0].server=$addr
  20. for server in $OLD_SERVER; do
  21. if [ "$server" = "$addr" ]; then
  22. continue
  23. fi
  24. uci add_list dhcp.@dnsmasq[0].server=$server
  25. done
  26. uci delete dhcp.@dnsmasq[0].resolvfile 2>/dev/null
  27. uci set dhcp.@dnsmasq[0].noresolv=1
  28. uci commit dhcp
  29. /etc/init.d/dnsmasq restart
  30. }
  31. stop_forward_dnsmasq()
  32. {
  33. local OLD_PORT="$1"
  34. addr="127.0.0.1#$OLD_PORT"
  35. OLD_SERVER="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
  36. echo $OLD_SERVER | grep "^$addr" >/dev/null 2>&1
  37. if [ $? -ne 0 ]; then
  38. return
  39. fi
  40. uci del_list dhcp.@dnsmasq[0].server=$addr 2>/dev/null
  41. addrlist="`uci get dhcp.@dnsmasq[0].server 2>/dev/null`"
  42. if [ -z "$addrlist" ] ; then
  43. uci set dhcp.@dnsmasq[0].resolvfile=/tmp/resolv.conf.auto 2>/dev/null
  44. uci delete dhcp.@dnsmasq[0].noresolv 2>/dev/null
  45. fi
  46. uci commit dhcp
  47. /etc/init.d/dnsmasq restart
  48. }
  49. set_iptable()
  50. {
  51. local ipv6_server=$1
  52. local tcp_server=$2
  53. IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
  54. for IP in $IPS
  55. do
  56. if [ "$tcp_server" == "1" ]; then
  57. iptables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
  58. fi
  59. iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
  60. done
  61. if [ "$ipv6_server" == 0 ]; then
  62. return
  63. fi
  64. IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
  65. for IP in $IPS
  66. do
  67. if [ "$tcp_server" == "1" ]; then
  68. ip6tables -t nat -A PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
  69. fi
  70. ip6tables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $AdGuardHome_PORT >/dev/null 2>&1
  71. done
  72. }
  73. clear_iptable()
  74. {
  75. local OLD_PORT="$1"
  76. local ipv6_server=$2
  77. IPS="`ifconfig | grep "inet addr" | grep -v ":127" | grep "Bcast" | awk '{print $2}' | awk -F : '{print $2}'`"
  78. for IP in $IPS
  79. do
  80. iptables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
  81. iptables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
  82. done
  83. if [ "$ipv6_server" == 0 ]; then
  84. return
  85. fi
  86. echo "warn ip6tables nat mod is needed"
  87. IPS="`ifconfig | grep "inet6 addr" | grep -v " fe80::" | grep -v " ::1" | grep "Global" | awk '{print $3}'`"
  88. for IP in $IPS
  89. do
  90. ip6tables -t nat -D PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
  91. ip6tables -t nat -D PREROUTING -p tcp -d $IP --dport 53 -j REDIRECT --to-ports $OLD_PORT >/dev/null 2>&1
  92. done
  93. }
  94. service_triggers() {
  95. procd_add_reload_trigger firewall
  96. procd_add_reload_trigger "$CONFIGURATION"
  97. }
  98. get_tz()
  99. {
  100. SET_TZ=""
  101. if [ -e "/etc/localtime" ]; then
  102. return
  103. fi
  104. for tzfile in /etc/TZ /var/etc/TZ
  105. do
  106. if [ ! -e "$tzfile" ]; then
  107. continue
  108. fi
  109. tz="`cat $tzfile 2>/dev/null`"
  110. done
  111. if [ -z "$tz" ]; then
  112. return
  113. fi
  114. SET_TZ=$tz
  115. }
  116. rm_port53()
  117. {
  118. local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
  119. dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
  120. if [ -z "$dnsmasq_port" ]; then
  121. dnsmasq_port="53"
  122. fi
  123. if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then
  124. if [ "$dnsmasq_port" == "53" ]; then
  125. dnsmasq_port="1745"
  126. fi
  127. elif [ "$dnsmasq_port" == "53" ]; then
  128. return
  129. fi
  130. config_editor "dns.port" "$dnsmasq_port" "$configpath"
  131. uci set dhcp.@dnsmasq[0].port="53"
  132. uci commit dhcp
  133. /etc/init.d/dnsmasq reload
  134. }
  135. use_port53()
  136. {
  137. local AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
  138. dnsmasq_port=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
  139. if [ -z "$dnsmasq_port" ]; then
  140. dnsmasq_port="53"
  141. fi
  142. if [ "$dnsmasq_port" == "$AdGuardHome_PORT" ]; then
  143. if [ "$dnsmasq_port" == "53" ]; then
  144. AdGuardHome_PORT="1745"
  145. fi
  146. elif [ "$AdGuardHome_PORT" == "53" ]; then
  147. return
  148. fi
  149. config_editor "dns.port" "53" "$configpath"
  150. uci set dhcp.@dnsmasq[0].port="$AdGuardHome_PORT"
  151. uci commit dhcp
  152. /etc/init.d/dnsmasq reload
  153. }
  154. do_redirect()
  155. {
  156. config_load "${CONFIGURATION}"
  157. local section="$CONFIGURATION"
  158. args=""
  159. ipv6_server=1
  160. tcp_server=0
  161. enabled=$1
  162. if [ "$enabled" == "1" ]; then
  163. echo -n "1">/var/run/AdGredir
  164. else
  165. echo -n "0">/var/run/AdGredir
  166. fi
  167. config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
  168. AdGuardHome_PORT=$(config_editor "dns.port" "" "$configpath" "1")
  169. if [ -z "$AdGuardHome_PORT" ]; then
  170. AdGuardHome_PORT="0"
  171. fi
  172. config_get "redirect" "$section" "redirect" "none"
  173. config_get "old_redirect" "$section" "old_redirect" "none"
  174. config_get "old_port" "$section" "old_port" "0"
  175. config_get "old_enabled" "$section" "old_enabled" "0"
  176. uci get dhcp.@dnsmasq[0].port 2>&1 >/dev/null || uci set dhcp.@dnsmasq[0].port="53" 2>&1 >/dev/null
  177. if [ "$old_enabled" = "1" -a "$old_redirect" == "exchange" ]; then
  178. AdGuardHome_PORT=$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)
  179. fi
  180. if [ "$old_redirect" != "$redirect" ] || [ "$old_port" != "$AdGuardHome_PORT" ] || [ "$old_enabled" = "1" -a "$enabled" = "0" ]; then
  181. if [ "$old_redirect" != "none" ]; then
  182. if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then
  183. clear_iptable "$old_port" "$ipv6_server"
  184. elif [ "$old_redirect" == "dnsmasq-upstream" ]; then
  185. stop_forward_dnsmasq "$old_port"
  186. elif [ "$old_redirect" == "exchange" ]; then
  187. rm_port53
  188. fi
  189. fi
  190. elif [ "$old_enabled" = "1" -a "$enabled" = "1" ]; then
  191. if [ "$old_redirect" == "redirect" -a "$old_port" != "0" ]; then
  192. clear_iptable "$old_port" "$ipv6_server"
  193. fi
  194. fi
  195. uci delete AdGuardHome.@AdGuardHome[0].old_redirect 2>/dev/null
  196. uci delete AdGuardHome.@AdGuardHome[0].old_port 2>/dev/null
  197. uci delete AdGuardHome.@AdGuardHome[0].old_enabled 2>/dev/null
  198. uci add_list AdGuardHome.@AdGuardHome[0].old_redirect="$redirect" 2>/dev/null
  199. uci add_list AdGuardHome.@AdGuardHome[0].old_port="$AdGuardHome_PORT" 2>/dev/null
  200. uci add_list AdGuardHome.@AdGuardHome[0].old_enabled="$enabled" 2>/dev/null
  201. uci commit AdGuardHome
  202. [ "$enabled" -gt 0 ] || return 1
  203. if [ "$AdGuardHome_PORT" == "0" ]; then
  204. return 1
  205. fi
  206. if [ "$redirect" = "redirect" ]; then
  207. set_iptable $ipv6_server $tcp_server
  208. elif [ "$redirect" = "dnsmasq-upstream" ]; then
  209. set_forward_dnsmasq "$AdGuardHome_PORT"
  210. elif [ "$redirect" == "exchange" -a "$(uci get dhcp.@dnsmasq[0].port 2>/dev/null)" == "53" ]; then
  211. use_port53
  212. fi
  213. }
  214. get_filesystem()
  215. {
  216. # print out path filesystem
  217. echo $1 | awk '
  218. BEGIN{
  219. while (("mount"| getline ret) > 0)
  220. {
  221. split(ret,d);
  222. fs[d[3]]=d[5];
  223. m=index(d[1],":")
  224. if (m==0)
  225. {
  226. pt[d[3]]=d[1]
  227. }else{
  228. pt[d[3]]=substr(d[1],m+1)
  229. }}}{
  230. split($0,d,"/");
  231. if ("/" in fs)
  232. {
  233. result1=fs["/"];
  234. }
  235. if ("/" in pt)
  236. {
  237. result2=pt["/"];
  238. }
  239. for (i=2;i<=length(d);i++)
  240. {
  241. p[i]=p[i-1]"/"d[i];
  242. if (p[i] in fs)
  243. {
  244. result1=fs[p[i]];
  245. result2=pt[p[i]];
  246. }
  247. }
  248. if (result2 in fs){
  249. result=fs[result2]}
  250. else{
  251. result=result1}
  252. print(result);}'
  253. }
  254. config_editor()
  255. {
  256. awk -v yaml="$1" -v value="$2" -v file="$3" -v ro="$4" '
  257. BEGIN{split(yaml,part,"\.");s="";i=1;l=length(part);}
  258. {
  259. if (match($0,s""part[i]":"))
  260. {
  261. if (i==l)
  262. {
  263. split($0,t,": ");
  264. if (ro==""){
  265. system("sed -i '\''"FNR"c \\"t[1]": "value"'\'' "file);
  266. }else{
  267. print(t[2]);
  268. }
  269. exit;
  270. }
  271. s=s"[- ]{2}";
  272. i++;
  273. }
  274. }' $3
  275. }
  276. boot_service() {
  277. config_load "${CONFIGURATION}"
  278. config_get waitonboot $CONFIGURATION waitonboot "0"
  279. config_get_bool enabled $CONFIGURATION enabled 0
  280. if [ "$enabled" == "1" ]; then
  281. if [ "$waitonboot" == "1" ]; then
  282. do_redirect 0
  283. procd_open_instance "waitnet"
  284. procd_set_param command "/usr/share/AdGuardHome/waitnet.sh"
  285. procd_close_instance
  286. echo "no net start pinging"
  287. else
  288. start_service
  289. fi
  290. fi
  291. }
  292. start_service() {
  293. # Reading config
  294. config_load "${CONFIGURATION}"
  295. config_get hashpass $CONFIGURATION hashpass ""
  296. if [ -n "$hashpass" ]; then
  297. config_editor "users.password" "$hashpass" "$configpath"
  298. uci set $CONFIGURATION.$CONFIGURATION.hashpass=""
  299. fi
  300. local enabled
  301. config_get_bool enabled $CONFIGURATION enabled 0
  302. if [ "$enabled" == "1" ]; then
  303. local ADDITIONAL_ARGS=""
  304. config_get configpath $CONFIGURATION configpath "/etc/AdGuardHome.yaml"
  305. config_get binpath $CONFIGURATION binpath "/usr/bin/AdGuardHome/AdGuardHome"
  306. echo -e "$configpath\n$binpath">/lib/upgrade/keep.d/luci-app-adguardhome
  307. mkdir -p ${binpath%/*}
  308. ADDITIONAL_ARGS="$ADDITIONAL_ARGS -c $configpath"
  309. config_get httpport $CONFIGURATION httpport 3000
  310. ADDITIONAL_ARGS="$ADDITIONAL_ARGS -p $httpport"
  311. config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
  312. ADDITIONAL_ARGS="$ADDITIONAL_ARGS -w $workdir"
  313. config_get backupwd $CONFIGURATION backupwd "0"
  314. if [ "$backupwd" == "1" ] && [ ! -d "$workdir/data" ]; then
  315. config_get backupwdpath $CONFIGURATION backupwdpath "/usr/bin/AdGuardHome"
  316. cp -u -r -f $backupwdpath/data $workdir
  317. fi
  318. mkdir -p $workdir/data
  319. echo -e "$configpath\n$binpath">/lib/upgrade/keep.d/luci-app-adguardhome
  320. # hack to save config file when upgrade system
  321. config_get keepdb $CONFIGURATION keepdb 0
  322. if [ "$keepdb" -eq 1 ]; then
  323. echo -e "$workdir/data/sessions.db\n$workdir/data/stats.db\n$workdir/data/querylog.json">>/lib/upgrade/keep.d/luci-app-adguardhome
  324. fi
  325. config_get logfile $CONFIGURATION logfile ""
  326. if [ -n "$logfile" ]; then
  327. ADDITIONAL_ARGS="$ADDITIONAL_ARGS -l $logfile"
  328. fi
  329. if [ ! -f "$binpath" ]; then
  330. do_redirect 0
  331. rm /var/run/update_core_error 2>/dev/null
  332. touch /var/run/update_core
  333. sh /usr/share/AdGuardHome/update_core.sh 2>&1 >/tmp/AdGuardHome_update.log || touch /var/run/update_core_error
  334. rm /var/run/update_core
  335. exit 0
  336. fi
  337. config_get_bool verbose $CONFIGURATION verbose 0
  338. if [ "$verbose" -eq 1 ]; then
  339. ADDITIONAL_ARGS="$ADDITIONAL_ARGS -v"
  340. fi
  341. # for overlay data-stk-oo not suppport
  342. local cwdfs=$(get_filesystem $workdir)
  343. echo "workdir is a $cwdfs filesystem"
  344. if [ "$cwdfs" == "jffs2" ]; then
  345. echo "fs error ln db to tmp $workdir $cwdfs"
  346. logger "AdGuardHome" "warning db redirect to tmp"
  347. touch $workdir/data/stats.db
  348. if [ ! -L $workdir/data/stats.db ]; then
  349. mv -f $workdir/data/stats.db /tmp/stats.db 2>/dev/null
  350. ln -s /tmp/stats.db $workdir/data/stats.db 2>/dev/null
  351. fi
  352. touch $workdir/data/sessions.db
  353. if [ ! -L $workdir/data/sessions.db ]; then
  354. mv -f $workdir/data/sessions.db /tmp/sessions.db 2>/dev/null
  355. ln -s /tmp/sessions.db $workdir/data/sessions.db 2>/dev/null
  356. fi
  357. fi
  358. procd_open_instance
  359. get_tz
  360. if [ -n "$SET_TZ" ]; then
  361. procd_set_param env TZ="$SET_TZ"
  362. fi
  363. procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
  364. procd_set_param limits core="unlimited"
  365. procd_set_param stderr 1
  366. # pass config to script on start
  367. procd_set_param command $binpath $ADDITIONAL_ARGS
  368. procd_set_param file "$configpath"
  369. procd_set_param file "/etc/config/AdGuardHome"
  370. procd_close_instance
  371. if [ -f "$configpath" ]; then
  372. do_redirect 1
  373. else
  374. do_redirect 0
  375. config_get "redirect" "AdGuardHome" "redirect" "none"
  376. if [ "$redirect" != "none" ]; then
  377. procd_open_instance "waitconfig"
  378. procd_set_param command "/usr/share/AdGuardHome/watchconfig.sh"
  379. procd_close_instance
  380. echo "no config start watching"
  381. fi
  382. fi
  383. do_crontab
  384. echo "AdGuardHome turn on"
  385. (sleep 10 && [ -z "$(pgrep $binpath)" ] && logger "AdGuardHome" "no process in 10s cancel redirect" && do_redirect 0 )&
  386. fi
  387. }
  388. reload_service()
  389. {
  390. rm /var/run/AdGucitest 2>&1 >/dev/null
  391. config_load "${CONFIGURATION}"
  392. echo "AdGuardHome reloading"
  393. config_get_bool enabled $CONFIGURATION enabled 0
  394. if [ "$enabled" == "0" ]; then
  395. procd_kill $CONFIGURATION
  396. do_redirect 0
  397. do_crontab
  398. config_get hashpass $CONFIGURATION hashpass ""
  399. if [ -n "$hashpass" ]; then
  400. config_editor "users.password" "$hashpass" "$configpath"
  401. uci set $CONFIGURATION.$CONFIGURATION.hashpass=""
  402. fi
  403. else
  404. procd_send_signal $CONFIGURATION
  405. start
  406. fi
  407. echo "enabled=$enabled"
  408. }
  409. del_querylog(){
  410. local btarget=$(ls $backupwdpath/data | grep -F "querylog.json" | sort -r | head -n 1)
  411. local wtarget=$(ls $workdir/data | grep -F "querylog.json" | sort -r | head -n 1)
  412. if [ "$btarget"x == "$wtarget"x ]; then
  413. [ -z "$btarget" ] && return 1
  414. rm -f $workdir/data/$wtarget
  415. rm -f $backupwdpath/data/$btarget
  416. return 0
  417. fi
  418. if [ "$btarget" \> "$wtarget" ]; then
  419. rm -f $backupwdpath/data/$btarget
  420. return 0
  421. else
  422. rm -f $workdir/data/$wtarget
  423. return 0
  424. fi
  425. }
  426. stop_service()
  427. {
  428. config_load "${CONFIGURATION}"
  429. do_redirect 0
  430. do_crontab
  431. config_get backupwd $CONFIGURATION backupwd "0"
  432. if [ "$backupwd" == "1" ]; then
  433. config_get backupwdpath $CONFIGURATION backupwdpath "/usr/bin/AdGuardHome"
  434. mkdir -p $backupwdpath
  435. config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
  436. while :
  437. do
  438. cpret=$(cp -u -r -f $workdir/data $backupwdpath 2>&1)
  439. echo "$cpret"
  440. echo "$cpret" | grep "no space left on device"
  441. if [ "$?" == "0" ]; then
  442. echo "磁盘已满,删除log重试中"
  443. del_querylog && continue
  444. rm -f -r $backupwdpath/data/filters
  445. rm -f -r $workdir/data/filters && continue
  446. echo "backup failed"
  447. fi
  448. break
  449. done
  450. fi
  451. echo "AdGuardHome turn off"
  452. echo "enabled=$enabled"
  453. }
  454. boot() {
  455. rc_procd boot_service "$@"
  456. if eval "type service_started" 2>/dev/null >/dev/null; then
  457. service_started
  458. fi
  459. }
  460. do_crontab(){
  461. crontab_updatecore
  462. crontab_cutquerylog
  463. }
  464. crontab_updatecore(){
  465. config_get autoupdate $CONFIGURATION autoupdate "0"
  466. local line=$(grep "/usr/share/AdGuardHome/update_core.sh" $CRON_FILE)
  467. if [ -n "$line" -a "${line:0:1}" != "#" ]; then
  468. if [ $autoupdate -eq 1 ]; then
  469. return
  470. else
  471. sed -i '\,/usr/share/AdGuardHome/update_core.sh,'d $CRON_FILE
  472. echo "#$line" >> $CRON_FILE
  473. /etc/init.d/cron restart
  474. fi
  475. else
  476. if [ $autoupdate -eq 1 ]; then
  477. [ -z "$line" ] && line="#30 3 * * * /usr/share/AdGuardHome/update_core.sh 2>&1"
  478. sed -i '\,/usr/share/AdGuardHome/update_core.sh,'d $CRON_FILE
  479. echo "${line:1}" >> $CRON_FILE
  480. /etc/init.d/cron restart
  481. else
  482. return
  483. fi
  484. fi
  485. }
  486. crontab_cutquerylog(){
  487. config_get cutquerylog $CONFIGURATION cutquerylog "0"
  488. config_get workdir $CONFIGURATION workdir "/usr/bin/AdGuardHome"
  489. local line=$(grep "tail -n [0-9]* $workdir/data/querylog.json > $workdir/data/querylog.json" $CRON_FILE)
  490. if [ -n "$line" -a "${line:0:1}" != "#" ]; then
  491. if [ $cutquerylog -eq 1 ]; then
  492. return
  493. else
  494. sed -i "\,tail -n [0-9]* .*/data/querylog.json > .*/data/querylog.json,d" $CRON_FILE
  495. echo "#$line" >> $CRON_FILE
  496. /etc/init.d/cron restart
  497. fi
  498. else
  499. if [ $cutquerylog -eq 1 ]; then
  500. [ -z "$line" ] && line="#0 * * * * tail -n 2000 $workdir/data/querylog.json > $workdir/data/querylog.json"
  501. sed -i "\,tail -n [0-9]* .*/data/querylog.json > .*/data/querylog.json,d" $CRON_FILE
  502. echo "${line:1}" >> $CRON_FILE
  503. /etc/init.d/cron restart
  504. else
  505. return
  506. fi
  507. fi
  508. }