Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - eibd per upstart zuverlässig starten, wie?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    - √ - eibd per upstart zuverlässig starten, wie?

    Hallo Forum,

    nachdem mein Neubau nun bezogen ist, habe ich angefangen mich um die Visualisierung etc zu kümmern.

    Dazu habe ich den eibd (V 0.0.5) in einem virtuellen Ubuntu 32 Bit Server 10.04.2 installiert und es funktioniert auch prinzipiell wie erwartet. Ich gehe über eine Siemens N148/22 an den Bus.

    Um den eibd beim Systemstart automatisch zu starten habe ich ein upstart service
    Code:
    # eibd  Service
    
    description     "eibd KNX interface"
    author          "kaenix"
    
    start on (local-filesystems
              and net-device-up
          and runlevel [2345])
    stop on runlevel [016]
    
    respawn
    
    script
    
    exec /usr/bin/eibd -D -S -T -i ipt:192.168.1.234
    
    end script
    In ca 60% der Systemstarts läuft der Service leider nicht automatisch an, in den anderen Fällen klappt es problemlos. Wenn es mal läuft, läuft es problemlos.

    Wie macht ihr das bzw was mache ich falsch?
    (...ausser dass ich ein Linux ab und zu neu starte )
    Thx

    #2
    also ich lasse es normal als DAEMON in /etc/init.d/eibd mit folgendem Inhalt starten:
    Code:
    #!/bin/sh
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Description of the service"
    NAME=eibd
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS="-D -T -S -d -i --pid-file=/var/run/eibd.pid ipt:192.168.xx.yy"
    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.0-6) to ensure that this file is present.
    . /lib/lsb/init-functions
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            # 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
            # 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
            ;;
      #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|restart|force-reload}" >&2
            exit 3
            ;;
    esac
    Gruß,
    Marc

    Kommentar


      #3
      Zitat von kaenix Beitrag anzeigen
      In ca 60% der Systemstarts läuft der Service leider nicht automatisch an, in den anderen Fällen klappt es problemlos. Wenn es mal läuft, läuft es problemlos.
      Bei der EIBD Config kann nur das Problem sein, das das Netzwerk noch nicht ganz gestartet ist - wahrscheinlich ist die Default-Route noch nicht aktiv (Netwerk-Device ethX noch nicht up? DHCP aktiv und konfiguration nicht abgeschlossen?)

      Kommentar


        #4
        @aggie89go:
        Vielen dank für das Beispiel. Wenn ich mit upstart nicht klarkomme, werde ich das ausprobieren.

        @mkoegler:
        Danke für den Denkanstoß!

        Ich habe hier gefunden dass man auch ein bestimmtes Netzwerk-Interface spezifizieren kann. Nachdem ich die Startbedingung in
        Code:
        ...
        and net-device-up IFACE=eth0
        ...
        geändert habe, hat es nach 5 Reboots in Folge geklappt.

        Vermutlich war das loopback-interface meistens vor eth0 bereit und eibd wurde deshalb zu früh gestartet.

        Vorerst scheint das Problem gelöst, danke nochmal.

        Kommentar

        Lädt...
        X