Hallo zusammen,
mein eibd startet beim init nicht zuverlässig unter Debian (HW: Alix1.D).
Ca. bei jedem 2. Booten bricht der eibd gleich nach dem Starten mit
ab.
Alle Ausgaben aus dem Log:
Gestartet wird er via /etc/init.d/eibd:
Das Problem scheint eine Race-Condition zu sein.
Denn:
Nach dem Booten kann ich den eibd mit dem Startscript starten und stoppen wie ich lustig bin, ohne den oben genannten Fehler reproduzieren zu können.
Da funktionierts dann einfach zuverlässig.
Es klappt auch zuverlässig beim init, wenn ich beim Starten die Option -S (Server part) weglasse.
Was macht denn der Server-Part eigentlich?
Geht ohne den Server-Part Tunneling / Routing?
Ich möchte einerseits eine Visu drauf laufen haben.
Andererseits möchte ich vom Windows aus mittels der ETS auf den Bus zugreifen.
Für letzteres brauche ich Tunneling, oder?
Vielleicht kann mich ja auch der Martin Koegler ein wenig aufschlauen, damit ich die Zusammenhänge besser verstehen.
Wünsch Euch allen jedenfalls noch ein schönes Wochenende!
mein eibd startet beim init nicht zuverlässig unter Debian (HW: Alix1.D).
Ca. bei jedem 2. Booten bricht der eibd gleich nach dem Starten mit
Code:
initilization of the EIBnet/IP server failed
Alle Ausgaben aus dem Log:
Code:
Layer 7(00000000,4F8887CD) EIBD should not run as root Layer 2(0823F668,4F8887CD) Open Layer 2(0823F668,4F8887CD) Openend Layer 3(0824FAC0,4F8887CD) Open Layer 2(0823F668,4F8887CD) open-reset(001): 01 Layer 8(0823F768,4F8887CD) OpenInetSocket 6720 Layer 8(0823F768,4F8887CD) InetSocket opened Layer 8(082701A8,4F8887CD) OpenLocalSocket Layer 8(082701A8,4F8887CD) LocalSocket opened Layer 8(08280540,4F8887CD) Open Layer 0(082809B8,4F8887CD) Open Layer 0(082809B8,4F8887CD) Openend Layer 0(082809B8,4F8887CD) Close initilization of the EIBnet/IP server failed
Code:
#! /bin/sh ### BEGIN INIT INFO # Provides: eibd # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Initscript of EIB deamon # Description: The EIB deamon handles the communication for the # KNX home automation bus. ### END INIT INFO # Author: Olaf Seidel # # Do NOT "set -e" # For bugfixing only: # set -x # exec >> /tmp/eibd_start.log 2>&1 # echo "**************** EIBD Init Startscript beginnt hier *****************" # date # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="EIB deamon" NAME=eibd DAEMON=/usr/bin/$NAME # Olaf Seidel, 14.04.2012: -S disabled. Servermode leads to error "initilization of the EIBnet/IP server failed" # sometimes during init # DAEMON_ARGS=" -D -T -S -i -c -t1023 --daemon=/var/log/eib.log -u --pid-file=/var/run/eibd.pid tpuarts:/dev/ttyS0" DAEMON_ARGS=" -D -T -i -c -t1023 --daemon=/var/log/eib.log -u --pid-file=/var/run/eibd.pid tpuarts:/dev/ttyS0" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # necessary pause (reason unknown) sleep 1 setserial /dev/ttyS0 uart none setserial /dev/ttyS0 autoconfig # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # set the access rights for the unix socket /tmp/eib, so that the webbrowser (in detail: comet visu) # is able to write to it. sleep 1 # give the deamon time for the socket creation chmod a+w /tmp/eib # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac :
Denn:
Nach dem Booten kann ich den eibd mit dem Startscript starten und stoppen wie ich lustig bin, ohne den oben genannten Fehler reproduzieren zu können.
Da funktionierts dann einfach zuverlässig.
Es klappt auch zuverlässig beim init, wenn ich beim Starten die Option -S (Server part) weglasse.
Was macht denn der Server-Part eigentlich?
Geht ohne den Server-Part Tunneling / Routing?
Ich möchte einerseits eine Visu drauf laufen haben.
Andererseits möchte ich vom Windows aus mittels der ETS auf den Bus zugreifen.
Für letzteres brauche ich Tunneling, oder?
Vielleicht kann mich ja auch der Martin Koegler ein wenig aufschlauen, damit ich die Zusammenhänge besser verstehen.
Wünsch Euch allen jedenfalls noch ein schönes Wochenende!
Kommentar