왜 dnsmasq 서비스가 항상 다시 시작됩니까 (by quqi99)

2763 단어 OpenStackNetworking
저자: 장화는 2020-05-19 저작권 성명에 발표: 임의로 전재할 수 있으며, 전재할 때 반드시 하이퍼링크 형식으로 글의 원본 출처와 저자 정보 및 본 저작권 성명을 표시하십시오

문제.


최근에는 집안의 인터넷이 때때로 좀 느리다는 느낌이 든다. 특히 때로는 웹 페이지를 볼 때 dns를 찾지 못하지만 곧 반 초 안에 자동으로 성공적인 웹 페이지를 찾는다.쓸 수 있는 것도 그리 느린 편은 아니어서 늘 이 일에 신경을 쓰지 않았다.평소의 경험에 따르면 이런 느린 것은 일반적으로 dns와 관련이 있기 때문에 오늘 아침에 특별히 공유기에 로그인하여 dnsmasq의 상태를 본다.설정 같은 것을 한 번 검사했지만 이상이 보이지 않았지만, 무의식중에 dnsmasq의 프로세스 ID가 때때로 변하는 것을 발견하였다.

dnsmasq: exiting on receipt of SIGTERM


그리고 dnmasq 프로세스를 멈추고 debug 모드 (- d) 로 로그를 보려고 했지만/etc/init가 실행되었을 때d/dnsma stop 이후 도무지 멈출 수가 없어요. 잠시 후 프로세스가 자동으로 시작됐어요.코드를 읽은 후 오픈wrt의 init 스크립트가 프로cd를 사용했지만, 모든 프로cd와 관련된 줄을 주석한 후, 멈추었지만, 곧 자동으로 시작되었다.그리고 보니/etc/rc.common은 자동으로 시작되었고 이어서 반복적인 테스트 과정에서 다음과 같은 코드를 형성했다.
root@OpenWrt:~# cat /etc/init.d/dnsmasq 
#!/bin/sh /etc/rc.common
START=80
start() {
      #/usr/sbin/dnsmasq --conf-dir=/tmp/dnsmasq.d --conf-file=/etc/dnsmasq.conf --user=dnsmasq --group=dnsmasq --server=114.114.114.114 -k &
   fi
}
stop() {
   killall dnsmasq
}

이 때 프론트 데스크톱에서'/usr/sbin/dnsmasq --conf-dir=/tmp/dnsmasq.d --conf-file=/etc/dnsmasq.conf --user=dnsmasq --group=dnsmasq --server=114.114.114 - d'디버깅 중 dnsmasq 프로세스가 스스로 종료되는 것을 발견했습니다. 이 오류를 보고했습니다. "dnsmasq: exiting on receipt of SIGTERM"이때dnsmasq 프로그램에 문제가 있는 줄 알고 절망하는 순간 dnsmasq가 위의 stop에 의해 살해되었다는 것을 알았습니다./etc/init.d/dnsmasq stop은 dnsmasq를 멈출 수 없기 때문에 위의 stop 함수 중의killall dnsmasq는 백엔드에서 정기적으로 운행된다. 그러면 백엔드의 debug dnsmasq 프로세스를 죽인다.

해결책


'dnsmasq: exiting on receipt of SIGTERM'이 발생한 원인을 파악한 후 스크립트를 잠시 다음과 같은 추악한 코드로 변경합니다.
COLUMNS=999 ps -ef |grep dns
oot@OpenWrt:~# cat /etc/init.d/dnsmasq 
#!/bin/sh /etc/rc.common
START=80

start() {
   if pidof dnsmasq >/dev/null
   then
      echo "dnsmasq is running"
   else
      echo "dnsmasq stopped, start it now ..."
      mkdir -p /var/lib/misc
      /usr/sbin/dnsmasq --conf-dir=/tmp/dnsmasq.ssr --conf-file=/etc/dnsmasq.conf --user=dnsmasq --group=dnsmasq \
      --server=114.114.114.114 --listen-address=192.168.99.1,127.0.0.1 --dhcp-range=192.168.99.100,192.168.99.199,2400h \
      --dhcp-option=3,192.168.99.1 --dhcp-option=option:dns-server,192.168.99.1 --cache-size=0
   fi
}

stop() {
   echo 'NOTE: we must not use 'killall dnsmasq' to stop dnsmasq here because stop function always be called by rc.common periodically'
}

server can’t find xxx.my.salesforce.com: REFUSED


또한 백명단을 설명하는 dns는 문제없고 블랙리스트를 해석하는 dns도 문제없지만 명단에 없는 dns타임스'server can't find xxx를 해석합니다.my.salesforce.com: REFUSED'같은 오류가 발생했을 때 dnsmasq 명령에 추가되지 않았기 때문입니다 – 서버 = 114.114.114.114

cache-size=0


-cache-size=0 dnsmasq 캐시 사용을 피합니다

좋은 웹페이지 즐겨찾기