Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 06.01.2011 20:12:57
Hallo und Guten Abend,
ich habe irgendwo im Netz dieses Init Script für EIBD gefunden. Allerdings startet dieses mein EIBD nicht automatisch. Ich bin nicht derjenige, der scripten kann. Geschweigedenn habe ich viel Ahnung von debian. Ich hoffe daher, das sich jemand das Problem anschaut und mir das ganze lauffähig abändert.
Code: Alles auswählen
#! /bin/sh
### BEGIN INIT INFO
# Provides: eibd
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start eibd service at the end of boot
# Description: This services is for communications with knx/eib.
### END INIT INFO
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 usb:4:2:1:0:0"
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()
In den Startparametern des EIBD Dienstes wird eine USB Schnittstelle übergeben. Die Adresse dazu finde ich mittels
. Toll wäre es, wenn zuerst die Adresse ermittelt wird, und dann als Parameter übergeben wird. So muss ich nicht immer die Adresse von Hand ändern.
Vielen Dank.
Torsten
-
cosmac
- Beiträge: 4576
- Registriert: 28.03.2005 22:24:30
Beitrag
von cosmac » 06.01.2011 22:49:12
hi,
so wie du es hier gepostet hast, ist es nur ein halbes Init-Script, lade es bitte mal als Datei nach
NoPaste rauf. Die Hälfte scheint aber gut zu Debian zu passen, also besteht Hoffnung
Für die USB-Parameter wäre im Prinzip diese Zeile
Code: Alles auswählen
DAEMON_ARGS="-D -T -S -d -i --pid-file=/var/run/eibd.pid usb:4:2:1:0:0"
durch etwas in dieser Art zu ersetzen:
Code: Alles auswählen
USBID=$(findknxusb | cut -d' ' -f2)
DAEMON_ARGS="-D -T -S -d -i --pid-file=/var/run/eibd.pid usb:$USBID"
Falls findknxusb mehr als eine Zeile ausgibt, wird es komplizierter, poste auf jeden Fall mal seine Ausgabe.
Beware of programmers who carry screwdrivers.
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 07.01.2011 12:25:32
So, das Script liegt hier
http://debianforum.de/forum/pastebin.ph ... ew&s=35193.
Die Ausgabe von findknxusb ist folgende:
Code: Alles auswählen
root@obelix:/home/torsten# findknxusb
Possible addresses for KNX USB devices:
device: 4:2:1:0:0 (Merten GmbH & Co. KG:KNX-USB Data Interface)
root@obelix:/home/torsten#
Es können theoretisch mehrere USB Device gefunden werden. Es ist aber unwahrscheinlich, das sich jemand mehrere zulegt. Weil Quatsch. Mehr als mit einer kannste eh nix machen. Von daher würde das erste device reichen.
-
cosmac
- Beiträge: 4576
- Registriert: 28.03.2005 22:24:30
Beitrag
von cosmac » 07.01.2011 16:31:14
also, das Script selbst funktioniert wohl, aber mangels EIB-Hardware läuft hier nicht wirklich viel. Was passiert denn, wenn du den eibd von Hand startest (als root)? Die vielen "-D -T usw." stimmen schon für deine Anwendung?
Wenn das funktionieren sollte, probier mal diese beiden:
Code: Alles auswählen
eibd -D -T -S -d -i --pid-file=/var/run/eibd.pid usb:4:2:1:0:0
eibd -D -T -S -d --pid-file=/var/run/eibd.pid -i usb:4:2:1:0:0
Wenn es nicht funktioniert und trotzdem keine Fehlermeldung ausgegeben wird, kannst du in
/var/log/syslog nachschauen und/oder den eibd so starten und dann die Datei
/tmp/eibd-strace nach NoPaste rauf laden:
Beware of programmers who carry screwdrivers.
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 07.01.2011 16:40:35
Die Parameter stimmen schon. Derzeit starte ich mein eibd ja so von Hand. Er startet eben nur nicht automatisch nach einem systemstart.
-
cosmac
- Beiträge: 4576
- Registriert: 28.03.2005 22:24:30
Beitrag
von cosmac » 07.01.2011 16:46:54
startest du ihn denn von Hand mit der Option "--pid-file"? Ich vermute nämlich, dass diese Option im Script vor das "-i" gehört, so wie im 2. code-Block im vorigen Posting.
Beware of programmers who carry screwdrivers.
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 07.01.2011 17:00:34
Ich habe den Parameter pid-file mit -i getauscht. Startet trotzdem nicht beim Systemstart. und Strace gibts bei mir nicht?!
-
cosmac
- Beiträge: 4576
- Registriert: 28.03.2005 22:24:30
Beitrag
von cosmac » 07.01.2011 17:23:45
wird das Script beim Systemstart überhaupt ausgeführt? Hat das Script die richtigen Rechte ("-rwxr-xr-x 1 root root") und ist in
/etc/rc2.d/ richtig verlinkt?
Falls nicht: wenn du lenny benutzt, wird der Link so erstellt:
oder wenn du squeeze hast, so (dabei wird eine kleinere Zahl als 99 automatisch erzeugt):
beides darf keine Fehlermeldung geben.
Beware of programmers who carry screwdrivers.
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 07.01.2011 22:31:42
Das script liegt in /etc/init.d/eibd, es hat die richtigen Rechte. Ich habe es mit insserv eingepflegt. Trotzdem startet eibd nach einem systemstart nicht :/
-
cosmac
- Beiträge: 4576
- Registriert: 28.03.2005 22:24:30
Beitrag
von cosmac » 08.01.2011 10:33:01
dann fällt mir nur noch eine Notlösung ein. Schreib den Aufruf, so wie er von Hand funktioniert, in /etc/rc.local vor das "exit". Diese Datei muss auch ausführbar sein, braucht aber keine Links und keine sonstigen Tricks.
Beware of programmers who carry screwdrivers.
-
bmario
- Beiträge: 1257
- Registriert: 05.09.2007 12:15:47
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dresden
Beitrag
von bmario » 08.01.2011 13:32:05
mal ein
ausgeführt?
Und funktioniert es denn, wenn du /etc/init.d/eibd start aufrufst?
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 08.01.2011 17:30:10
ausgeführt. Nix.
händisch ausgeführt. Eibd startet wie gewollt.
Ich bin ratlos :/
-
bmario
- Beiträge: 1257
- Registriert: 05.09.2007 12:15:47
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dresden
Beitrag
von bmario » 08.01.2011 17:35:45
Dann liegt es definitiv an der Verlinkung in den Runleveln, such mal in den Ordnern /etc/rcS.d und /etc/rc2.d nach eibd...
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 08.01.2011 18:24:47
in /etc/rc2.d/ gibt es den eintrag
Code: Alles auswählen
lrwxrwxrwx 1 root root 14 4. Jan 21:31 S17eibd -> ../init.d/eibd
Die Datei hat ja root Rechte, findknxusb braucht ebenfalls root Rechte. Gibt es da vllt ein Fehler im Script?
-
bmario
- Beiträge: 1257
- Registriert: 05.09.2007 12:15:47
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dresden
Beitrag
von bmario » 08.01.2011 19:39:31
Hm vlt. spinnt da die Reihenfolge der Init-Skripte... laut LSB-Headers sollte es zwar mit als letztes Skript beim Start ausgeführt werden, aber zeige mal die Ausgabe von
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 08.01.2011 19:54:13
gibt es bei mir nicht.
Code: Alles auswählen
root@obelix:/etc# ls /etc/rc0.d
K01eibd K02atd K02nfs-kernel-server K02proftpd K02transmission-daemon K02virtualbox-ose K03sendsigs K05umountnfs.sh K06portmap K07networking K09umountfs K11umountroot README
K02apache2 K02exim4 K02openbsd-inetd K02samba K02urandom K02winbind K04rsyslog K06nfs-common K07hwclock.sh K08ifupdown K10lvm2 K12halt
root@obelix:/etc# #
-
bmario
- Beiträge: 1257
- Registriert: 05.09.2007 12:15:47
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dresden
Beitrag
von bmario » 08.01.2011 19:56:38
sharkx hat geschrieben: gibt es bei mir nicht.
Oh natürlich, Tippfehler
Ich meinte /etc/rc
2.d
Nichts zu tun ist viel besser,
als mit viel Mühe nichts zu schaffen. - Laotse
-
sharkx
- Beiträge: 26
- Registriert: 11.03.2010 21:19:03
Beitrag
von sharkx » 08.01.2011 20:00:52
Code: Alles auswählen
root@obelix:/etc# ls /etc/rc2.d
README S01samba S01virtualbox-ose S03acpid S03cron S03exim4 S03proftpd S03ssh S05bootlogs S15nfs-common S17eibd S17rmnologin
S01rsyslog S01transmission-daemon S02apache2 S03atd S03dbus S03openbsd-inetd S03smartmontools S03winbind S14portmap S16nfs-kernel-server S17rc.local S17stop-bootlogd
root@obelix:/etc#
-
sipple
- Beiträge: 1
- Registriert: 27.04.2011 17:17:12
Beitrag
von sipple » 27.04.2011 17:32:19
Guten Abend
Ist ja schon etwas länger her, aber hier eine Lösung (die bei MIR hilft). Ich verwende Debian Squeeze 6.0.1a und EIBD 0.0.5.
Schreib mal in Dein Startscript, im Header, in der Zeile nach "SCRIPTNAME=/etc/init.d/$NAME" folgendes rein:
sleep 5
Das sollte reichen. Wenn's dann geht, kannst Du Dich an ne kürzere Pause rantasten. 5s "Schlaf" ist evtl. gar nicht nötig.
Gruß, Martin
P.S. Falls sich das eh erledigt hat und Du ne bessere Lösung hast, würde mich die interessieren.