Kleines Linux Problem auf dem RPi

Begonnen von dougie, 20 Januar 2013, 20:14:42

Vorheriges Thema - Nächstes Thema

dougie


Ich bin wirklich kein Linux Crack, und brauche ab und zu noch Hilfe zur Selbsthilfe :-)

Ich hatte auf meinem RPi bis heute Mittag owserver (und nur das) installiert und das lief einwandfrei!
Aufgrund von Problemen mit meinem 1W Bus musste ich owhttpd nachtinstallieren.

Hab ich gemacht mit

apt-get install owhttpd

Das ging problemlos über die Bühne und ich konnte owhttpd mit

owhttpd -p 2121 /dev/i2c-1

starten.
Dann musste ich irgendwann den RPi neu starten und der owserver wurde nicht mehr automatisch gestartet.
Ich hab probiert mit

/etc/init.d/owserver start

den manuell zu starten, aber der Service meldet FAIL

Wenn ich den owserver manuell mit

owserver -p 4304 /dev/i2c-1

starte, dann läuft er problemlos los.

Fragen: 1) wie kann ich raus finden, warum der deamon nicht startet?
2) was hab ich falsch gemacht oder muss ich machen, das der wieder automatisch startet?

VG
Ralf


Rohan

Hi Ralf,

ich nutze zwar kein ow*, aber wenn ich diesen Beitrag lese, müssen die Dienste, da sie einander bedingen, in einer bestimmten Reihenfolge gestartet werden.

Vlt. hilft es ja.

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

dougie


Danke Thomas,

so wie ich das verstehe, macht er Autor deines Links den start "per Hand" in Form eines Scriptes.

Bei mir gibt es in /etc/init.d die Datei owserver, und in der steht das folgende.


Leider kann ich nicht erkennen was schief läuft. Gibt es da nicht irgendwo nen LogFile, wo ich eine Fehlermeldung finden kann?
Einfach nur FAIL hilft mir leider nicht viel weiter. :-)

VG
Ralf


#!/bin/sh

### BEGIN INIT INFO
# Provides:          owserver
# Required-Start:    $remote_fs $syslog $network $named
# Required-Stop:     $remote_fs $syslog $network $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 1-wire TCP server
# Description:       Start and stop a TCP server for 1-wire control.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
CONFFILE=/etc/owfs.conf
DESC="1-Wire TCP Server"
NAME="owserver"
DAEMON=/usr/bin/$NAME
PIDDIR=/var/run/owfs
PIDFILE=$PIDDIR/$NAME.pid

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

. /lib/lsb/init-functions

d_start() {
    [ -d $PIDDIR ] || {
    mkdir -m 0775 -p $PIDDIR
    chown root:root $PIDDIR >/dev/null 2>&1
    }
    start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- -c $CONFFILE \
        --pid-file $PIDFILE
    # ensure the daemon has been started
    sleep 1
    pidofproc -p $PIDFILE $DAEMON >/dev/null
}

d_stop() {
    start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
    sleep 1
    if [ -f $PIDFILE ] && ! ps h `cat $PIDFILE` > /dev/null
    then
        # Stale PID file (owserver was successfilly stoped),
        #remove it
        rm -f $PIDFILE
    fi
}

d_status() {
    pidofproc -p $PIDFILE $DAEMON > /dev/null
}

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" "$NAME"
        d_start
        log_end_msg $?
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        d_stop
        log_end_msg $?
        ;;
    restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        d_status && d_stop
        d_start
        log_end_msg $?
        ;;
    status)
        d_status
        if [ $? -eq 0 ];then
            log_success_msg "$NAME is running"
        else
            log_failure_msg "$NAME is not running"
        fi
        ;;
    *)
        echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|sta$
        exit 1
        ;;
esac

exit 0

jhohn

schon in /var/log/messages oder /var/log/syslog nachgesehen?
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Rohan

Hmmm...

sowohl dein Skript, als auch das im Link steht in /etc/init.d => Skripte, die beim System-/Dienstestart genutzt werden (können).

Dein owserver und owhttpd dürften in verschiedenen Skripten gestartet werden. Wenn die Reihenfolge des Aufrufs verkehrt ist, kann es scheitern. Im Link wird alles über ein Skript gestartet, in der dort festgelegten Reihenfolge.

Mach mal ein

$ ps ax | grep ow

(evtl. mit vorangestelltem sudo)

dann siehst du laufende ow*-Prozesse, die du dann per

$ kill -9 Prozess-ID

beenden kannst (Prozess-ID findet du in der von "ps" erzeugten Ausgabe).

Dann rufst du deine Init-Skripte in der evtl. notwendigen Reihenfolge auf, also erst

$/etc/init.d/owserver start
$ /etc/init.d/owhttpd start

Funktioniert es dann?

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

dougie


Danke Thomas,

leider kann ich aktuell nicht erkennen, wie/wo owhttpd gestartet wird. Ich vermute dort irgendwo liegt mein Problem.

owserver hat ein Skript in /etc/init.d aber owhttpd nicht.
Wo könnte dann denn sonst noch passieren?

VG
Ralf

Martin Haas

Dienste, die im /etc/init.d/ liegen werden per Standard nicht automatisch beim Booten gestartet. Man muss schon dem Betriebssystem mitteilen, dass sie gestartet werden sollen.

Auf der RPi läuft ja Debian, also einmal folgendes pro Dienst entippen, dann geht das:
sudo update-rc.d <Dateiname aus /etc/init.d> defaults

dougie


Vielen Dank Martin, hab ich sofort gemacht und das hat er auch fehlerfrei angenommen.

Ausprobieren kann ich das erst im nächsten "Service-Fenster". Mal sehen wann ich dazu komme!!

Nochmals vielen Dank!!
Ralf

Martin Haas

Zitat von: dougie schrieb am So, 20 Januar 2013 20:14/etc/init.d/owserver start

den manuell zu starten, aber der Service meldet FAIL

Wenn ich den owserver manuell mit

owserver -p 4304 /dev/i2c-1

Ich habe mir spaßeshalber die Pakete auch mal installiert. Die Runlevel waren bereits verlinkt, das
sudo update-rc.d <Dateiname aus /etc/init.d> defaults wurde bei Installation bereits ausgeführt, wird dir hier also nichts helfen.

In der Default-Einstellung wird nicht der owserver mit /dev/i2c-i gestartet. Das ist die Ursache für dein FAIL. Die entsprechende Einstellungen musst du also noch in die /etc/owfs.conf eintragen. Aber dann geht das ;-)

dougie

...ich muss hier leider noch mal nachfragen, weil das Problem leider noch besteht.

Meine /etc/owfs.conf sieht so aus:


server: device = /dev/i2c-1 # i2c port: DS2482-100
http: port = 2121
ftp: port = 2120
server: port = localhost:4304
server: port = raspberry:4304
server: port = 192.168.1.18:4304
Celsius


und die /etc/init.d/owserver ruft auch genau diese Datei auf:

pi@raspberrypi /etc/init.d $ cat owserver
#!/bin/sh

### BEGIN INIT INFO
# Provides:          owserver
# Required-Start:    $remote_fs $syslog $network $named
# Required-Stop:     $remote_fs $syslog $network $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 1-wire TCP server
# Description:       Start and stop a TCP server for 1-wire control.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
CONFFILE=/etc/owfs.conf
DESC="1-Wire TCP Server"
NAME="owserver"
DAEMON=/usr/bin/$NAME
PIDDIR=/var/run/owfs
PIDFILE=$PIDDIR/$NAME.pid

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

. /lib/lsb/init-functions

d_start() {
    [ -d $PIDDIR ] || {
    mkdir -m 0775 -p $PIDDIR
    chown root:root $PIDDIR >/dev/null 2>&1
    }
    start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- -c $CONFFILE \
        --pid-file $PIDFILE
    # ensure the daemon has been started
    sleep 1
    pidofproc -p $PIDFILE $DAEMON >/dev/null
}

d_stop() {
    start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
    sleep 1
    if [ -f $PIDFILE ] && ! ps h `cat $PIDFILE` > /dev/null
    then
        # Stale PID file (owserver was successfilly stoped),
        #remove it
        rm -f $PIDFILE
    fi
}

d_status() {
    pidofproc -p $PIDFILE $DAEMON > /dev/null
}

case "$1" in
    start)
        log_daemon_msg "Starting $DESC" "$NAME"
        d_start
        log_end_msg $?
        ;;
    stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        d_stop
        log_end_msg $?
        ;;
    restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        d_status && d_stop
        d_start
        log_end_msg $?
        ;;
    status)
        d_status
        if [ $? -eq 0 ];then
            log_success_msg "$NAME is running"
        else
            log_failure_msg "$NAME is not running"
        fi
        ;;
    *)
        echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|status}" >&2
        exit 1
        ;;
esac

exit 0



Frage: wo kann ich sehen, welches Kommando beim Systemstart ausgeführt wird?

VG
Ralf

Martin Haas

Zitat von: dougie schrieb am Fr, 08 Februar 2013 11:24CONFFILE=/etc/owfs.conf
NAME="owserver"
DAEMON=/usr/bin/$NAME
    start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- -c $CONFFILE \
        --pid-file $PIDFILE

Es wird $DAEMON gestartet, der aus DAEMON=/usr/bin/$NAME besteht und NAME="owserver"

Also /usr/bin/owserver mit -c $CONFFILE, also den Einstellungen aus CONFFILE=/etc/owfs.conf

dougie


Danke dir, genau so hab ich es auch verstanden, aber wie man hier sehen kann, geht das schief, und ich weiss einfach nicht warum.


(siehe Anhang / see attachement)


VG
Ralf

UweH

Den gleichen Effekt habe ich, wenn ich aus der owfs.conf die FAKE-Devices auskommentiere. Keine Ahnung warum, aber seitdem lasse ich sie drin. Vielleicht ist's auch bei Dir so?

dougie



..nee, da geb ich mich nicht mit zufrieden :-)

Ich will verstehen wie das OS funktioniert, sonst bringt mich das ja nicht weiter.

VG
Ralf

Martin Fischer

Hiya Ralf,

wenn ich mir Deinen (im wahrsten Sinne des Wortes) "Screenshot" so ansehe, dann fällt mir auf, das Du fhem _vor_ OWFS startest. Das solltest Du ggf. anpassen.

Sinnvoll erscheint mir, FHEM als letzte Instanz zu starten, wenn auch alle anderen Dienste laufen. Z.B. könnte auch das Starten von ntpd nach FHEM dazu führen, das Du ggf. mal den einen oder anderen "Stolperer" in den Logfileeinträgen, bezogen auf die Uhrzeit haben könntest.

Da Du ein debian im Einsatz hast, schau Dir dazu mal:
man update-rc.d
Damit kannst Du die Startreihenfolge beeinflussen, wie schon zuvor hier geschrieben wurde.

Aber nun mal Butter bei die Fische...

mach mal ein ls -1 /etc/init.d/ (das -1 ist ein "Minus Eins", nicht "kleines L" ;-) ) gefolgt von einem ls -1 /etc/rc*.d und poste erst mal die Ergebnisse.

Gruß Martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

dougie

Moin Martin,

ich werde mir das mit update-rc sofort ansehen, aber hier schon mal die gewünschten Infos:

pi@raspberrypi ~ $ ls -1 /etc/init.d
alsa-utils
bootlogs
bootmisc.sh
checkfs.sh
checkroot-bootclean.sh
checkroot.sh
console-setup
cron
dbus
dphys-swapfile
fake-hwclock
fhem
halt
hostname.sh
hwclock.sh
ifplugd
kbd
keyboard-setup
killprocs
kmod
lightdm
motd
mountall-bootclean.sh
mountall.sh
mountdevsubfs.sh
mountkernfs.sh
mountnfs-bootclean.sh
mountnfs.sh
mpd
mtab.sh
networking
nfs-common
ntp
owserver
procps
proftpd
rc
rc.local
rcS
README
reboot
rmnologin
rpcbind
rsyslog
screen-cleanup
sendsigs
single
skeleton
ssh
sudo
triggerhappy
udev
udev-mtab
umountfs
umountnfs.sh
umountroot
urandom
watchdog
wd_keepalive
x11-common
pi@raspberrypi ~ $


pi@raspberrypi ~ $ ls -1 /etc/rc*.d
/etc/rc0.d:
K01watchdog
K02fake-hwclock
K02fhem
K02ifplugd
K02lightdm
K02mpd
K02owserver
K02proftpd
K02triggerhappy
K02urandom
K03alsa-utils
K04sendsigs
K05rsyslog
K06umountnfs.sh
K07nfs-common
K07rpcbind
K08hwclock.sh
K08networking
K09umountfs
K10umountroot
K11halt
README

/etc/rc1.d:
K01watchdog
K02fake-hwclock
K02fhem
K02ifplugd
K02lightdm
K02mpd
K02owserver
K02proftpd
K02triggerhappy
K03alsa-utils
K05rsyslog
K07nfs-common
K07rpcbind
README
S01bootlogs
S01killprocs
S01motd
S02single

/etc/rc2.d:
K02lightdm
K07nfs-common
K07rpcbind
README
S01bootlogs
S01fhem
S01ifplugd
S01motd
S01mpd
S01rsyslog
S01sudo
S01triggerhappy
S01wd_keepalive
S02cron
S02dbus
S02dphys-swapfile
S02ntp
S02owserver
S02proftpd
S02ssh
S04rc.local
S04rmnologin
S04watchdog

/etc/rc3.d:
K07nfs-common
K07rpcbind
README
S01bootlogs
S01fhem
S01ifplugd
S01motd
S01mpd
S01rsyslog
S01sudo
S01triggerhappy
S01wd_keepalive
S02cron
S02dbus
S02dphys-swapfile
S02ntp
S02owserver
S02proftpd
S02ssh
S03lightdm
S04rc.local
S04rmnologin
S04watchdog

/etc/rc4.d:
K07nfs-common
K07rpcbind
README
S01bootlogs
S01fhem
S01ifplugd
S01motd
S01mpd
S01rsyslog
S01sudo
S01triggerhappy
S01wd_keepalive
S02cron
S02dbus
S02dphys-swapfile
S02ntp
S02owserver
S02proftpd
S02ssh
S03lightdm
S04rc.local
S04rmnologin
S04watchdog

/etc/rc5.d:
K07nfs-common
K07rpcbind
README
S01bootlogs
S01fhem
S01ifplugd
S01motd
S01mpd
S01rsyslog
S01sudo
S01triggerhappy
S01wd_keepalive
S02cron
S02dbus
S02dphys-swapfile
S02ntp
S02owserver
S02proftpd
S02ssh
S03lightdm
S04rc.local
S04rmnologin
S04watchdog

/etc/rc6.d:
K01watchdog
K02fake-hwclock
K02fhem
K02ifplugd
K02lightdm
K02mpd
K02owserver
K02proftpd
K02triggerhappy
K02urandom
K03alsa-utils
K04sendsigs
K05rsyslog
K06umountnfs.sh
K07nfs-common
K07rpcbind
K08hwclock.sh
K08networking
K09umountfs
K10umountroot
K11reboot
README

/etc/rcS.d:
K11rpcbind
K12nfs-common
README
S01fake-hwclock
S01hostname.sh
S01mountkernfs.sh
S02udev
S03keyboard-setup
S04mountdevsubfs.sh
S05hwclock.sh
S06checkroot.sh
S07checkroot-bootclean.sh
S07kmod
S07mtab.sh
S08checkfs.sh
S09mountall.sh
S10mountall-bootclean.sh
S11procps
S11udev-mtab
S11urandom
S12networking
S13mountnfs.sh
S14mountnfs-bootclean.sh
S15kbd
S16console-setup
S17alsa-utils
S17bootmisc.sh
S17screen-cleanup
S17x11-common
pi@raspberrypi ~ $


Martin Haas

Zitat von: Martin Haas schrieb am Sa, 09 Februar 2013 17:53
Zitat von: dougie schrieb am Fr, 08 Februar 2013 11:24CONFFILE=/etc/owfs.conf
NAME="owserver"
DAEMON=/usr/bin/$NAME
    start-stop-daemon --start --quiet --oknodo --exec $DAEMON -- -c $CONFFILE \
        --pid-file $PIDFILE

Es wird $DAEMON gestartet, der aus DAEMON=/usr/bin/$NAME besteht und NAME="owserver"

Also /usr/bin/owserver mit -c $CONFFILE, also den Einstellungen aus CONFFILE=/etc/owfs.conf

Es wäre wichtig zu wissen (auch wegen der Startreihenfolge), ob man das ausserhalb der Start-/Stopskripte so starten kann.

Also geht
sudo /usr/bin/owserver -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid
??



dougie



...danke euch beiden. Hab ich natürlich sofort ausprobiert:

2086 ?        00:00:00 console-kit-dae
 2153 ?        00:00:00 polkitd
 2171 ?        00:04:55 owserver
 2173 ?        00:00:00 owhttpd
 9786 ?        00:00:00 kworker/0:0
22091 ?        00:00:00 kworker/u:2
25362 ?        00:00:00 proftpd
25925 ?        00:00:03 kworker/0:1
26948 ?        00:00:00 sshd
26960 ?        00:00:01 sshd
26963 pts/0    00:00:01 bash
32116 ?        00:00:00 flush-179:0
32302 pts/0    00:00:00 ps
pi@raspberrypi /var/log $ kill -5 2171
pi@raspberrypi /var/log $ sudo /usr/bin/owserver -c /etc/owfs.conf --pid-file /var/run/owfs/owserver.pid
pi@raspberrypi /var/log $

pi@raspberrypi /var/log $ ps -A
....
26963 pts/0    00:00:01 bash
32116 ?        00:00:00 flush-179:0
32309 ?        00:00:45 owserver
32328 pts/0    00:00:00 ps
pi@raspberrypi /var/log $


Hat also funktioniert!

So und jetzt kommt es: ich habe NICHTS verändert, aber als ich gerade noch mal einen reboot gemacht habe, startet owserver ohne Fehlermeldung!!!

Kann mir das auch jemand erklären?? :-)

Martin Fischer

ok, Danke... also bis auf das FHEM für meinen Geschmack zu früh gestartet wird, sieht das soweit i.O. aus. Eine owhttpd ist nicht vorhanden, wird also auch nicht gestartet.

> So und jetzt kommt es: ich habe NICHTS verändert, aber als ich gerade
> noch mal einen reboot gemacht habe, startet owserver ohne Fehlermeldung!!!

sowas nennt man: Fernheilung durch virtuelles Handauflegen.

Gruß Martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.

dougie



Danke Martin,

ja, ich wollte die /etc/init.d/owserver kopieren, und daraus eine owhttpd bauen. Natürlich den Inhalt anpassen und dann mit update-rc.d owhhtpd defaults einbinden?

Gegenfrage: wie kann ich denn erzielen, das fhem später startet? Eine höhere Nummer vergeben?

VG
Ralf

Martin Fischer

> ja, ich wollte die /etc/init.d/owserver kopieren, und daraus eine owhttpd bauen.
> Natürlich den Inhalt anpassen und dann mit update-rc.d owhhtpd defaults einbinden?

mit "defaults" wird owhttpd vermutlich auch wieder zu früh gestartet. hier musst du daraus achten, das owhttpd nach owserver gestartet wird.

> Gegenfrage: wie kann ich denn erzielen, das fhem später startet? Eine höhere Nummer vergeben?

jepp, genau so geht das. am besten startest du FHEM als letzte instanz.

gruß martin
--
Admin, Developer, Gründungsmitglied des FHEM e.V.