[gelöst] Freetz bug report: dnsmasq restart geht nicht

The Brad

Mitglied
Mitglied seit
20 Dez 2007
Beiträge
234
Punkte für Reaktionen
1
Punkte
16
Hallo,

wenn ich über das Freetz-WebIF die hosts-Datei editiere, kommt folgende Fehlermeldung:
Code:
Stopping dnsmasq...not running.
Starting dnsmasq...
dnsmasq: failed to bind DHCP server socket: Address already in use
failed.
bzw. wenn ich versuche, dnsmasq manuell zu starten:
Code:
Starting dnsmasq...failed.
Mir ist jedoch aufgefallen, dass dnsmasq der einzige prozess ist, der unter dem user "nobody" läuft (oder zu laufen versucht), vielleicht ist das auch der Fehler:
Code:
/var/mod/root # ps
  PID USER       VSZ STAT COMMAND
...
  794 root      4040 S    upnpd
  880 [COLOR="Red"]nobody  [/COLOR]  1076 S    dnsmasq --pid-file=/var/run/dnsmasq/dnsmasq.pid -p 53
 1289 root      9704 S N  ctlmgr
...

Freetz-Trunk Rev. 5226. Grüße, Brad
 
Zuletzt bearbeitet:
Hast Du den Fehler auch dann, wenn Du die hosts-Datei nicht editierst? Seit wann benutzt Du dnsmasq? Ich frage weil Du den user nobody angesprochen hast.

Was sagt:
Code:
sh -x /etc/init.d/rc.dnsmasq start
 
Das könnte hiermit zusammenhängen. Wobei mir nicht klar ist warum dnsmasq neu gestartet wird, wenn er nicht läuft.

Mfg Oliver
 
Ich benutze dnsmasq und auch die Freetz-hosts seit ewiger Zeit, ich kann leider nicht sagen, seit welcher revision das nicht mehr geht. Ist etwas mühsam, die Fehlerquelle zu identifzieren und hier gleichzeitig zu posten, da ich ohne dnsmasq bzw. Namensauflösung ja nicht mehr posten kann...

Nach einem reboot geht dnsmasq, wird unter dem user nobody ausgeführt und funktioniert. Ein restart über Freetz/Dienste (ohne edit der hosts-Datei) geht auch nicht:
Code:
Stopping dnsmasq...failed.
Starting dnsmasq...failed.

sh -x /etc/init.d/rc.dnsmasq start liefert unter anderem
Code:
+ local DAEMON_ENABLED=
+ [  == no -o  == inetd -a -x /etc/init.d/rc.inetd ]
+ modlib_check_running
+ echo dnsmasq_ENABLED
+ tr [:lower:]- [:upper:]_
+ eval echo $DNSMASQ_ENABLED
+ echo yes
+ [ yes == inetd ]
+ local fn=/var/run/dnsmasq/dnsmasq.pid
+ [ ! -s /var/run/dnsmasq/dnsmasq.pid ]
+ return 3
+ start
+ [ y != y ]
+ local OPTIONS=--pid-file=/var/run/dnsmasq/dnsmasq.pid
+ [ 53 ]
+ OPTIONS=--pid-file=/var/run/dnsmasq/dnsmasq.pid  -p 53
+ modlib_startdaemon dnsmasq --pid-file=/var/run/dnsmasq/dnsmasq.pid -p 53
+ echo -n Starting dnsmasq...
Starting dnsmasq...+ config
+ [ -x /tmp/flash/dnsmasq_conf ]
+ /mod/etc/default.dnsmasq/dnsmasq_conf
+ [ -r /tmp/flash/dnsmasq/dnsmasq.extra ]
+ cat /tmp/flash/dnsmasq/dnsmasq.extra
+ env - PATH=/sbin:/bin:/usr/sbin:/usr/bin dnsmasq --pid-file=/var/run/dnsmasq/dnsmasq.pid -p 53

dnsmasq: failed to bind DHCP server socket: Address already in use
+ local rv=2
+ [ 2 -ne 0 ]
+ echo failed.
failed.
+ exit 2

Kann der Fehler daher stammen, dass dnsmasq nicht richtig gekilled wird (zumindest gelingt es mir auch auf der Konsole irgendwie nicht)? ps zeigt den Prozess noch an, aber wenn ich jetzt die etc/hosts editiere, kommt die Meldung
Code:
Stopping dnsmasq...not running.
Starting dnsmasq...
dnsmasq: failed to bind DHCP server socket: Address already in use
failed.
 
Hallo,

man kann den Prozess mit "kill -9" erledigen und dann neu starten. Ist zwar nur ein Workaround, aber wenigstens funktioniert er anschließend wie gewünscht.
 
Wie sieht denn das ganze nach einem Neustart der Box aus? Läuft dnsmasq? Steht im pid-File die richtige PID drin?

edit: Was steht denn in der mod_net.log und mod.log zu dnsmasq?

MfG Oliver
 
Zuletzt bearbeitet:
Hallo,

ergänzend sollte ich vorweg schicken, dass ich gerade auf der 7270V2 meines Vaters arbeite:
54.04.85-17761 freetz-devel-5228

Nach einem Neustart arbeitet dnsmasq wie vorgesehen, hier als DHCP Server und DNS Proxy. In "/var/run/dnsmasq/dnsmasq.pid" steht auch die richtige PID drin.
"/var/log/mod.log" direkt nach einem Neustart:
Code:
rc.mod version freetz-devel-5228M
crond is disabled.
telnetd is disabled.
Starting Freetz webinterface...done.
Updating inetd config for dropbear: inactive.
Updating inetd config for rrdstats (webcfg-one): inactive.
Updating inetd config for rrdstats (webcfg-rrd): inactive.
Updating inetd config for telnetd: inactive.
Updating inetd config for webcfg: inactive.
Updating inetd config for wol: inactive.
Reloading inetd...not running.
Writing /var/flash/freetz...done.
23040 bytes written.
Starting inetd...done.
Setting up SSH authorized_keys for root...done.
Starting dropbear SSH server...done.
Starting dnsmasq...already running.
Starting openvpn ... done.
inadyn-mt is disabled.
Setting up onlinechanged scripting ...done.
Starting rrdstats...done.
Starting wol webinterface...done.
swap is disabled.

"/var/log/mod_net.log" direkt nach dem Neustart:
Code:
Starting dnsmasq...done.

"/var/log/mod_load.log" direkt nach einem Neustart:
Code:
Loading /var/flash/freetz...done.
Loading users, groups and passwords...done.
Loading hosts...done.
Loading config...done.
Loading modules...done.

Was nicht geht: dnsmasq neustarten über die freetz Weboberfläche. dnsmasq wird nicht ordnungsgemäß beendet. Nach einem Versuch des Neustarts über die Weboberfläche arbeitet dnsmasq nicht mehr, man braucht "kill -9", um es abzuschießen (normales "kill" reicht nicht). Nach einem "kill -9" kann man es neu starten und es arbeitet auch wieder.
 
Da das Problem wohl das Stoppen ist, wäre das interessant:
Code:
ps | grep dnsmasq
cat /var/run/dnsmasq/dnsmasq.pid
sh -x /etc/init.d/rc.dnsmasq stop
 
kann es sein, dass es mit den letzten Änderungen von cuma in modlibrc zusammen hängt? Soweit ich es aber in Erinnerung habe, wurde gerade die stop-Sektion letzte Zeit derart erweitert, dass das Stoppen auf jeden Fall klappen sollte. Und "kill -9" ist da auf jeden Fall als eine der letzten Optionen mit drin. Es kann natürlich passieren, dass die if-Bedingungen davor fehl schlagen, und es gar nicht zu diesem "kill -9" in der stop-Sektion kommt.
Um dies zu verifizieren, sollte man bei der "normal laufenden" dnsmasq entweder
Code:
sh -x /etc/init.d/rc.dnsmasq restart
oder wenigstens
Code:
sh -x /etc/init.d/rc.dnsmasq stop
ausführen, um zu sehen, wie es denn gestoppt wird.

Edit: Ralf war wieder schneller. Seine "ps" und "cat" sind natürlich auch von Interesse.

MfG
 
Ja, nach einem reboot geht dnsmasq und auch die pid scheint zu stimmen:
Code:
/var/mod/root # ps |grep dns
  880 nobody    1076 S    dnsmasq --pid-file=/var/run/dnsmasq/dnsmasq.pid -p 53
13170 root      1460 S    grep dns
/var/mod/root # cat /var/run/dnsmasq/dnsmasq.pid
880
/var/mod/root #
mod_net.log
Code:
Starting dnsmasq...done.
mod.log (Auszug):
Code:
...
Starting dnsmasq...already running.
...
 
Hallo,

hier mal die von Ralf angegebene Befehlsfolge:
Code:
/var/mod/root # ps | grep dnsmasq
 5179 nobody    1068 S    dnsmasq --pid-file=/var/run/dnsmasq/dnsmasq.pid -p 53
 5216 root      1436 S    grep dnsmasq
/var/mod/root # cat /var/run/dnsmasq/dnsmasq.pid
5179
/var/mod/root # sh -x /etc/init.d/rc.dnsmasq stop
+ DAEMON=dnsmasq
+ PID_FILE=/var/run/dnsmasq/dnsmasq.pid
+ . /etc/init.d/modlibrc
+ export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/mod/sbin:/mod/bin:/mod/usr/sbin:/mod/usr/bin
+ export LD_LIBRARY_PATH=/mod/lib:/mod/usr/lib
+ : dnsmasq
+ : dnsmasq
+ : dnsmasq_ENABLED
+ : dnsmasq
+ : /var/run/dnsmasq/dnsmasq.pid
+ [ -n dnsmasq ]
+ modlib_loadconfig
+ local CONF_FILE=/mod/etc/conf/dnsmasq.cfg
+ [ ! -r /mod/etc/conf/dnsmasq.cfg ]
+ . /mod/etc/conf/dnsmasq.cfg
+ export DNSMASQ_BOGUSPRIV=yes
+ export DNSMASQ_DHCP=yes
+ export DNSMASQ_DHCP_BOOT=no
+ export DNSMASQ_DHCP_BOOTFILE=
+ export DNSMASQ_DHCP_RANGE=192.168.177.20,192.168.177.200,12h
+ export DNSMASQ_DNS_PORT=53
+ export DNSMASQ_DOMAIN=frank-meyering.de
+ export DNSMASQ_ENABLED=yes
+ export DNSMASQ_ETHERS=yes
+ export DNSMASQ_OPTIONS=
+ export DNSMASQ_TFTP=no
+ export DNSMASQ_TFTP_TFTPROOT=
+ DAEMON_USER=nobody
+ DAEMON_GROUP=nobody
+ [ -r /var/env.cache ]
+ . /var/env.cache
+ export AB_TEST=0
+ export ANNEX=B
+ export ANNEX_TEST=0
+ export AUDIO_TEST=0
+ export AbCount=2
+ export CAPISERV_TEST=0
+ export CONFIG_AB_COUNT=2
+ export CONFIG_ACCESSORY_URL=http://www.avm.de/fritzbox_apps.php?hardware=139&oem=avm&language=de&country=&version=54.04.85&subversion=5228M
+ export CONFIG_ANNEX=B
+ export CONFIG_ASSIST=y
+ export CONFIG_ATA=y
+ export CONFIG_ATA_FULL=n
+ export CONFIG_ATA_NOPASSTHROUGH=n
+ export CONFIG_AUDIO=y
+ export CONFIG_AURA=y
+ export CONFIG_BASIS=y
+ export CONFIG_BLUETOOTH=n
+ export CONFIG_BLUETOOTH_CTP=n
+ export CONFIG_BOX_FEEDBACK=y
+ export CONFIG_BUTTON=y
+ export CONFIG_CAPI=y
+ export CONFIG_CAPI_MIPS=n
+ export CONFIG_CAPI_NT=y
+ export CONFIG_CAPI_POTS=y
+ export CONFIG_CAPI_TE=y
+ export CONFIG_CAPI_UBIK=n
+ export CONFIG_CAPI_XILINX=y
+ export CONFIG_CDROM=n
+ export CONFIG_CDROM_FALLBACK=n
+ export CONFIG_CHRONY=y
+ export CONFIG_CODECS_IN_PCMROUTER=n
+ export CONFIG_CONFIGD=y
+ export CONFIG_DECT=y
+ export CONFIG_DECT2=y
+ export CONFIG_DECT_AUDIOD=y
+ export CONFIG_DECT_CATIQ20=n
+ export CONFIG_DECT_MONI=y
+ export CONFIG_DECT_MONI_EX=y
+ export CONFIG_DECT_NO_EMISSION=y
+ export CONFIG_DECT_ONOFF=n
+ export CONFIG_DECT_PICTURED=y
+ export CONFIG_DEF=/var/config.def
+ export CONFIG_DIAGNOSE_LEVEL=0
+ export CONFIG_DOCSIS=n
+ export CONFIG_DOCSIS_CLI=n
+ export CONFIG_DOCSIS_PCD_NO_REBOOT=n
+ export CONFIG_DSL=y
+ export CONFIG_DSL_MULTI_ANNEX=n
+ export CONFIG_DSL_UR8=y
+ export CONFIG_DSL_VENDORID=
+ export CONFIG_ECO=y
+ export CONFIG_ECO_SYSSTAT=y
+ export CONFIG_ENVIRONMENT=/var/env
+ export CONFIG_ENVIRONMENT_PATH=/proc/sys/urlader
+ export CONFIG_ETH_COUNT=4
+ export CONFIG_ETH_GBIT=n
+ export CONFIG_EWETEL_SMARTMETER=n
+ export CONFIG_EXT2=y
+ export CONFIG_FAX2MAIL=y
+ export CONFIG_FAXSUPPORT=y
+ export CONFIG_FIRMWARE_URL=http://www.avm.de/fritzbox-firmware-update.php?hardware=139&oem=avm&language=de&country=
+ export CONFIG_FON=y
+ export CONFIG_FONBOOK2=y
+ export CONFIG_FONGUI2=y
+ export CONFIG_FONQUALITY=y
+ export CONFIG_FON_HD=y
+ export CONFIG_FON_IPPHONE=y
+ export CONFIG_FTP=y
+ export CONFIG_GDB=n
+ export CONFIG_GDB_FULL=n
+ export CONFIG_GDB_SERVER=n
+ export CONFIG_HOMEI2C=n
+ export CONFIG_HOSTNAME=fritz.fonwlan.box
+ export CONFIG_I2C=n
+ export CONFIG_IGD=y
+ export CONFIG_INETD=y
+ export CONFIG_INSTALL_TYPE=ur8_16MB_xilinx_4eth_2ab_isdn_nt_te_pots_wlan_usb_host_dect_61056
+ export CONFIG_IPTV_4THOME=y
+ export CONFIG_IPV6=y
+ export CONFIG_JFFS2=y
+ export CONFIG_KIDS=y
+ export CONFIG_KIDS_CONTENT=n
+ export CONFIG_LABOR_DSL=n
+ export CONFIG_LED_EVENTS=y
+ export CONFIG_LED_NO_DSL_LED=y
+ export CONFIG_LFS=y
+ export CONFIG_LIBZ=y
+ export CONFIG_LIB_MATH=y
+ export CONFIG_LLTD=y
+ export CONFIG_LOGD=n
+ export CONFIG_LUA=y
+ export CONFIG_MAILD=y
+ export CONFIG_MAILER=n
+ export CONFIG_MAILER2=y
+ export CONFIG_MEDIACLI=y
+ export CONFIG_MEDIASRV=y
+ export CONFIG_MEDIASRV_MOUNT=n
+ export CONFIG_MINI=y
+ export CONFIG_MORPHSTICK=n
+ export CONFIG_MTD_MAIL=y
+ export CONFIG_MTD_MAILSEND=y
+ export CONFIG_MTD_RSS=y
+ export CONFIG_MULTI_COUNTRY=n
+ export CONFIG_MULTI_LANGUAGE=n
+ export CONFIG_NAND=n
+ export CONFIG_NAS=y
+ export CONFIG_NEUERUL=y
+ export CONFIG_NFS=n
+ export CONFIG_NQOS=y
+ export CONFIG_NTFS=y
+ export CONFIG_OEM_DEFAULT=avm
+ export CONFIG_ONLINEHELP=y
+ export CONFIG_ONLINEHELP_URL=http://help.avm.de/fritzbox.php?hardware=139&oem=avm&language=de&country=&version=54.04.85&subversion=5228M
+ export CONFIG_ONLINEPB=y
+ export CONFIG_OPENSSL=n
+ export CONFIG_PLUGIN=n
+ export CONFIG_PRODUKT=Fritz_Box_7270_16
+ export CONFIG_PRODUKT_NAME=FRITZ!Box Fon WLAN 7270 v2
+ export CONFIG_PROV_DEFAULT=n
+ export CONFIG_QOS_METER=y
+ export CONFIG_RAMDISK=y
+ export CONFIG_RAMSIZE=64
+ export CONFIG_RELEASE=1
+ export CONFIG_REMOTE_HTTPS=y
+ export CONFIG_ROMSIZE=16
+ export CONFIG_SAMBA=y
+ export CONFIG_SERVICEPORTAL_URL=http://www.avm.de/fritzbox-service-portal.php?hardware=139&oem=avm&language=de&country=&version=54.04.85&subversion=5228M
+ export CONFIG_SESSIONID=y
+ export CONFIG_SPEECH_FEEDBACK=y
+ export CONFIG_SQLITE=y
+ export CONFIG_SQLITE_BILDER=y
+ export CONFIG_SQLITE_VIDEO=y
+ export CONFIG_SRTP=n
+ export CONFIG_STOREUSRCFG=y
+ export CONFIG_SUBVERSION=freetz-devel-5228M
+ export CONFIG_SWAP=n
+ export CONFIG_T38=y
+ export CONFIG_TAM=y
+ export CONFIG_TAM_MODE=1
+ export CONFIG_TAM_ONRAM=n
+ export CONFIG_TELEKOM_KOFFER=n
+ export CONFIG_TIMERCONTROL=y
+ export CONFIG_TR064=y
+ export CONFIG_TR069=y
+ export CONFIG_UBIK2=n
+ export CONFIG_UDEV=n
+ export CONFIG_UNIQUE_PASSWD=n
+ export CONFIG_UPNP=y
+ export CONFIG_USB=n
+ export CONFIG_USB_GSM=y
+ export CONFIG_USB_GSM_VOICE=n
+ export CONFIG_USB_HOST=y
+ export CONFIG_USB_HOST_AVM=n
+ export CONFIG_USB_HOST_TI=n
+ export CONFIG_USB_INTERNAL_HUB=n
+ export CONFIG_USB_PRINT_SERV=y
+ export CONFIG_USB_STORAGE=y
+ export CONFIG_USB_STORAGE_SPINDOWN=y
+ export CONFIG_USB_STORAGE_USERS=n
+ export CONFIG_USB_WLAN_AUTH=y
+ export CONFIG_UTF8=y
+ export CONFIG_VDSL=n
+ export CONFIG_VERSION=04.85
+ export CONFIG_VERSION_MAJOR=54
+ export CONFIG_VLYNQ=n
+ export CONFIG_VLYNQ0=3
+ export CONFIG_VLYNQ1=0
+ export CONFIG_VLYNQ_PARAMS=vlynq_reset_bit_0
+ export CONFIG_VOIP_ENUM=n
+ export CONFIG_VOL_COUNTER=y
+ export CONFIG_VPN=y
+ export CONFIG_VPN_CERTSRV=n
+ export CONFIG_WEBCM_INTERPRETER=y
+ export CONFIG_WEBDAV=y
+ export CONFIG_WEBSRV=y
+ export CONFIG_WEBUSB=y
+ export CONFIG_WLAN=y
+ export CONFIG_WLAN_1130TNET=n
+ export CONFIG_WLAN_1350TNET=n
+ export CONFIG_WLAN_EACS=y
+ export CONFIG_WLAN_GREEN=y
+ export CONFIG_WLAN_GUEST=y
+ export CONFIG_WLAN_IPTV=y
+ export CONFIG_WLAN_MADWIFI=y
+ export CONFIG_WLAN_OPENWIFI=n
+ export CONFIG_WLAN_RADIOSENSOR=y
+ export CONFIG_WLAN_SAVEMEM=y
+ export CONFIG_WLAN_TCOM_PRIO=n
+ export CONFIG_WLAN_TXPOWER=y
+ export CONFIG_WLAN_WDS=y
+ export CONFIG_WLAN_WEATHER_CAC=n
+ export CONFIG_WLAN_WMM=y
+ export CONFIG_WLAN_WPS=y
+ export CONFIG_XILINX=y
+ export Country=049
+ export Country_is_default=yes
+ export DECT_CAL=0
+ export DISABLE_WLAN=0
+ export DOCSIS_CAL=0
+ export DOCSIS_LIFETEST=0
+ export DSLMODE=0
+ export ETC_CONFIG_PATH=/etc/init.d/rc.init
+ export EXTERNAL_BOX_PARAMS=hardware=139&oem=avm&language=de&country=&version=54.04.85&subversion=5228M
+ export EthCount=4
+ export FINALIZE=0
+ export GCOV_PREFIX=/var/gcov
+ export GCOV_PREFIX_STRIP=3
+ export HOME=/
+ export HWRevision=139
+ export HWRevision_ATA=1
+ export HWRevision_BitFileCount=
+ export HWRevision_Reserved1=6
+ export HWSubRevision=0
+ export INTERNAL_NAME=Interner Speicher
+ export IR_TEST=0
+ export LD_PRELOAD=libfreetz.so.1.0.0
+ export Language=de
+ export Language_is_default=yes
+ export MANUAL_TZ_ENABLED=no
+ export OEM=avm
+ export OEM_DEFAULT_INDEX=
+ export OEM_tmp=avm
+ export PATH=/sbin:/bin:/usr/sbin:/usr/bin
+ export POTSCALL=0
+ export PPID=1
+ export PS1=\w \$ 
+ export PS2=> 
+ export PS4=+ 
+ export PTEST=ptest	
+ export PWD=/
+ export RAMDISK_ENABLED=yes
+ export Release=1
+ export SHELL=/bin/sh
+ export STATUS_TEST=0
+ export TERM=vt102
+ export TFTP_SERVER=192.168.178.20
+ export TRACKING=0
+ export TZ=CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00
+ export USB_HOST_TEST=0
+ export USER=root
+ export VERBOSE_RC_CONF=y
+ export WLAN_CAL=0
+ export WLAN_TEST=0
+ pidof -s multid
+ MULTID_PID=
+ xargs -0
+ MULTID_CMD= console=ttyS0,38400n8r
+ [ -z  console=ttyS0,38400n8r ]
+ [ -z  ]
+ nomultid=y
+ modlib_stop
+ local fn=/var/run/dnsmasq/dnsmasq.pid
+ cat /var/run/dnsmasq/dnsmasq.pid
+ local id=5179
+ echo -n Stopping dnsmasq...
Stopping dnsmasq...+ modlib_check_running
+ echo dnsmasq_ENABLED
+ tr [:lower:]- [:upper:]_
+ eval echo $DNSMASQ_ENABLED
+ echo yes
+ [ yes == inetd ]
+ local fn=/var/run/dnsmasq/dnsmasq.pid
+ [ ! -s /var/run/dnsmasq/dnsmasq.pid ]
+ cat /var/run/dnsmasq/dnsmasq.pid
+ kill -0 5179
+ [ 0 -eq 0 ]
+ return 0
+ stop
+ [ y != y ]
+ cat /var/run/dnsmasq/dnsmasq.pid
+ kill 5179
+ [ y != y ]
+ [ -L /var/flash/multid.leases ]
+ grep tffs /proc/devices
+ major=240 tffs
+ rm -f /var/flash/multid.leases
+ mknod /var/flash/multid.leases c 240 112
+ [ 0 -ne 127 ]
+ sleep 1
+ kill -0 5179
+ echo failed.
failed.
+ return 1
+ exit 0
 
Code:
+ cat /var/run/dnsmasq/dnsmasq.pid
+ kill -0 5179
+ [ 0 -eq 0 ]
+ return 0
+ stop
+ [ y != y ]
+ cat /var/run/dnsmasq/dnsmasq.pid
+ kill 5179
offensichtlich wird da was doppelt gemoppelt ausgeführt... Einmalig in modlibrc und einmalig nachher wieder in der stop-Sektion.
Ob das allerdings das Problem ist, weiß ich nicht. Ich würde an eurer Stelle aber die Zeilen aus der stop-Sektion entfernen und mal so ausprobieren.

Edit: Außerdem sehe ich da ein grundsätzliches Problem in der Reihenfolge der Ausführung. Neuerdings setzt cuma voraus, dass modlib_stop zunächst durchläuft um am Ende die stop-Sektion aus dem entsprechenden rc-Skript ausgeführt wird. Hier war das aber offensichtlich nicht so gedacht:
Code:
68	stop() {
69	        if [ "$nomultid" != "y" ]; then
70	                multid -s > /dev/null 2>&1
71	                rm /var/tmp/avm-resolv.conf
72	        fi
73	        kill $(cat $PID_FILE) 2> /dev/null
74	        [ "$nomultid" != "y" ] && $MULTID_CMD
75	
76	        if [ -L "/var/flash/multid.leases" ]; then
77	                major=$(grep tffs /proc/devices)
78	                rm -f /var/flash/multid.leases
79	                mknod /var/flash/multid.leases c ${major%%tffs} $((0x70))
80	        fi
81	}
82

Die eigentlichen kill-Aktionen sitzen hier mittendrin. Ergo: Man sollte dies aus der Funktion "stop" in die Sektion stop) rüberschieben. Zumindest die Zeilen vor dem Killen.

MfG
 
Zuletzt bearbeitet:
Für mich sieht das so aus als würde der dnsmasq nach dem kill noch laufen? Mit der gleichen PID (5179)?

MfG Oliver
 
Anscheinend haben wir zwei Probleme:
- Der dnsmasq beendet sich nicht, wenn er ein einfaches TERM-Signal bekommt. Oder auch nur nicht schnell genug? Kann jemand mal prüfen, ob dnsmasq sich nach der stop-Aktion doch noch irgendwann beendet?
- Da das rc-Skript eine eigene stop-Funktion definiert, wird kein KILL-Signal gesendet. Man könnte in der stop-Funktion im rc-Skript 127 zurückgeben, das würde bewirken, daß schließlich ein KILL-Signal gesendet wird.

Die elegantere Lösung wäre, herauszufinden, warum sich dnsmasq nicht (rechtzeitig?) selbst beendet nach dem TERM-Signal.
 
@Ralf: Diese Logik war mir nicht bewußt, dass KILL abhängig von dem Dasein der stop-Funktion ausgeführt wird.
Ich wäre auch dafür, die Ursache zunächst rauszufinden. Parallel würde ich allerdings auch die Geschichte mit 127 verfolgen.
Als ich mir die modlibrc und rc-Skripte (noch vor cumas Änderungen) angeschaut hatte, war ich ziemlich erstaunt, wie bei uns mir Rückgabewerten umgegangen wird. Nämlich gar nicht. Es war früher gang un gäbe, dass rc-Skripte 0 zurückgemeldet haben, obwohl die Aktion gar nicht erfolgreich war.
Cuma hat da schon vieles gerade gezogen, ich befürchte jedoch, dass wir immer noch keine vollständig saubere Linie haben, was die Verfolgung der Rückgabeparameter angeht.

MfG
 
Ich hab damit keine Probleme auf meiner Box:
Code:
+ modlib_stop
+ local fn=/var/run/dnsmasq/dnsmasq.pid
+ cat /var/run/dnsmasq/dnsmasq.pid
+ local id=4788
+ echo -n Stopping dnsmasq...
Stopping dnsmasq...+ modlib_check_running
+ echo dnsmasq_ENABLED
+ tr [:lower:]- [:upper:]_
+ eval echo $DNSMASQ_ENABLED
+ echo yes
+ [ yes == inetd ]
+ local fn=/var/run/dnsmasq/dnsmasq.pid
+ [ ! -s /var/run/dnsmasq/dnsmasq.pid ]
+ cat /var/run/dnsmasq/dnsmasq.pid
+ kill -0 4788
+ return 0
+ stop
+ [ y != y ]
+ cat /var/run/dnsmasq/dnsmasq.pid
+ kill 4788
+ [ y != y ]
+ [ -L /var/flash/multid.leases ]
+ grep tffs /proc/devices
+ major=240 tffs
+ rm -f /var/flash/multid.leases
+ mknod /var/flash/multid.leases c 240 112
+ [ 0 -ne 127 ]
+ sleep 1
+ kill -0 4788
+ rm -f /var/run/dnsmasq/dnsmasq.pid
+ echo done.
done.
+ return 0
+ exit 0
Code:
Jul 11 09:36:05 fritz daemon.info dnsmasq[4788]: exiting on receipt of SIGTERM
Warum geht die Uhrzeit vom dnsmasq 2h nach?!?
Aber er beendet sich auf alle Fälle.

Code:
# cat /mod/etc/dnsmasq.conf
domain-needed
log-async=10
bogus-priv
dhcp-range=192.168.178.20,192.168.178.200,12h
domain=freetz.box
expand-hosts
read-ethers
MfG Oliver
 
Ich habe mit dnsmasq auch keine Probleme. Er beendet sich und startet auch.
Code:
/var/mod/root # cat /mod/etc/dnsmasq.conf
domain-needed
log-async=10
read-ethers
 
@hermann72pb
Die Lösung mit "return 127" ist nicht die, die mir am besten gefällt, sondern nur die einfachste. Besser fände ich es, die Schleife mit dem kill in eine Funktion modlibrc_kill auszulagern und bei Bedarf aufzurufen.

Undabhängig davon wäre es am Besten, herauszufinden, warum sich dnsmasq nicht beendet. Kann dazu jemand ein strace auf dnsmasq laufen lassen und dann das TERM-Signal senden?

@olistudent
Die Zeit sollte nicht von dnsmasq, sondern vom syslog kommen. Wie sind denn die anderen zeiten im Log? Die zwei Stunden Differenz sprechen dafür, daß die Zeitzone nicht gesetzt ist oder nicht ausgewertet wird. Zwei Stunden ist genau die Differenz zwischen GMT und unserer Sommerzeit.
 
Hier scheint auch das Problem mit der Uhrzeit begründet:
Code:
/var/mod/root # strace -p 3249 -s 200
Process 3249 attached - interrupt to quit
_newselect(11, [3 5 6 7 8 9 10], [], [], NULL) = ? ERESTARTNOHAND (To be restart          ed)
--- SIGTERM (Terminated) @ 0 (0) ---
getpid()                                = 3249
write(11, "\4\0\0\0\0\0\0\0", 8)        = 8
sigreturn()                             = ? (mask now [ILL IOT CHLD STOP])
time(NULL)                              = 1278842425
stat64(0x425c98, 0x7f955a98)            = 0
_newselect(11, [3 5 6 7 8 9 10], [], [], NULL) = 1 (in [10])
time(NULL)                              = 1278842425
read(10, "\4\0\0\0\0\0\0\0", 8)         = 8
close(4)                                = 0
unlink("/var/run/dnsmasq/dnsmasq.pid")  = 0
getpid()                                = 3249
time([1278842425])                      = 1278842425
open("/etc/TZ", O_RDONLY)               = -1 EACCES (Permission denied)
getpid()                                = 3249
write(12, "<30>Jul 11 10:00:25 dnsmasq[3249]: exiting on receipt of SIGTERM\0",           65) = 65
close(12)                               = 0
exit(0)                                 = ?
Process 3249 detached
MfG Oliver
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.