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.