Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 19

Thema: rc.local funktioniert nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    Dec 2014
    Beiträge
    13

    Unhappy rc.local funktioniert nicht

    Hallo,

    ich nutze Raspbian und wundere mich warum rc.local nicht beim Start ausgeführt wird. Manuell ist dies kein Problem und alles wird normal ausgeführt. Ausführbar ist die Datei auch. Außerdem funktioniert genau die gleiche rc.local auf einem anderen Raspberry Pi mit Raspbian einwandfrei. Ich zerbreche mir jetzt schon Tage lang den Kopf was der Fehler sein könnte aber ich kann ihn einfach nicht finden. Ich hoffe jemand kann mir vielleicht helfen.

  2. #2
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.359
    Welche Raspbian-Version? Steht was in den Logs? Was steht in der Datei konkret drin, wie sieht sie aus (Rechte, Pfad, ...)
    Ich bin root - ich darf das.

  3. #3
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.019
    Du kannst ja auch einfach mal ein
    Code:
    echo "test" > /irgendwo/hin/test.log
    vor deinen Befehlen einfügen und dann prüfen ob rc.local wirklich ausgeführt wird.
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  4. #4
    Registrierter Benutzer
    Registriert seit
    Dec 2014
    Beiträge
    13
    @marce:
    Version: Raspbian GNU/Linux 8 (jessie)
    Logs? Da bräuchte ich vielleicht einen Hinweis was du damit meinst.
    Inhalt der rc.local:
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
    printf "My IP address is %s\n" "$_IP"
    fi

    echo "test" > /home/pi/Documents/test.log
    python /home/pi/Documents/programming/python/alert.py &

    exit 0
    (Hier noch mit dem Vorschlag von florian0285.)
    Es scheint so als ob sie ausgeführt wird weil die Log-Datei erstellt wird und auch der besagte Text enthalten ist.
    Nur sehe ich mein Python-Skript nicht im Hintergrund laufen wenn ich danach in "htop" suche.
    Wenn ich rc.local manuell starte sehe ich die Prozesse in "htop".
    Die Rechte der "alert.py" sind: -rw-r--r-- 1 root root
    Und die Rechte der "rc.local" sind: -rwxr-xr-x 1 root root
    "systemctl status rc-local.service" gibt folgendes zurück:
    rc-local.service - /etc/rc.local Compatibility
    Loaded: loaded (/lib/systemd/system/rc-local.service; enabled)
    Drop-In: /etc/systemd/system/rc-local.service.d
    └─ttyoutput.conf
    Active: active (exited) since Thu 2017-01-26 17:22:12 CET; 11min ago
    Process: 485 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)

    Warning: Unit file changed on disk, 'systemctl daemon-reload' recommended.
    Auf dem Pi bei dem alles problemlos funktioniert wird das zurückgegeben:
    rc-local.service - /etc/rc.local Compatibility
    Loaded: loaded (/lib/systemd/system/rc-local.service; static)
    Drop-In: /etc/systemd/system/rc-local.service.d
    └─ttyoutput.conf
    Active: active (running) since Thu 2017-01-26 04:33:51 CET; 13h ago
    Process: 522 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
    CGroup: /system.slice/rc-local.service
    ├─535 python /home/pi/Documents/programming/terra_control.py
    └─536 python /home/pi/Documents/programming/motiondetector/room_alert.py

    Warning: Unit file changed on disk, 'systemctl daemon-reload' recommended.
    Hier die passende rc.local:
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.

    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
    printf "My IP address is %s\n" "$_IP"
    fi

    python /home/pi/Documents/programming/terra_control.py &
    python /home/pi/Documents/programming/motiondetector/room_alert.py &

    exit 0
    An den Python-Skripts kann es eigentlich nicht liegen weil ich auch sehr einfach aufgebaute Skripts probiert habe aber sie trotzdem nicht ausgeführt wurden. Zum Beispiel eine Datei öffnen und einen kurzen Text einfügen. Manuell hat es ja funktioniert.

  5. #5
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.359
    versuch mal, alle Aufrufe mit kompletten Pfaden zu machen - ggf. passt da was nicht

    Auf den ersten Blick entdecke ich mal nicht viel "merwürdiges" - damit musst Du sich wohl mal Zeile für Zeile durchdebuggen, Return-Codes der Aufrufe auswerten, ...
    Ich bin root - ich darf das.

  6. #6
    Registrierter Benutzer
    Registriert seit
    Dec 2014
    Beiträge
    13
    @marce:
    Aber ich hab doch die kompletten Pfade hingeschrieben. Oder wie meinst du das?

    Sorry für die dumme Frage: Wie mache ich das? :P

  7. #7
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.359
    z.B. /usr/bin/python vs. python, ...
    Ich bin root - ich darf das.

  8. #8
    Registrierter Benutzer
    Registriert seit
    Dec 2014
    Beiträge
    13
    @marce:
    Funktioniert leider auch nicht...

  9. #9
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    20.359
    dann wirst Du um das einbauen von Test, Debugausgaben und ähnlichem nicht herumkommen.
    Ich bin root - ich darf das.

  10. #10
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.019
    Mach aus diesem echo "test" ein
    Code:
    python -c "print 'blub'" > /home/pi/hodor.txt
    Nach dem blub ist das ein ' und "
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  11. #11
    Registrierter Benutzer
    Registriert seit
    Dec 2014
    Beiträge
    13
    @florian0285:
    Funktioniert... Aber warum wird mein Python-Skript dann nicht ausgeführt? Ich bin gerade echt verwirrt.

  12. #12
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.019
    Der Pfad zu dem Skript hat keinen Tippfehler?

    Die Ausgabe von dem Befehl umleiten und prüfen ob das Skript ausgeführt wird? Ggf print's einbauen.

    Das Skript alert.py ist ein anderes als die zwei auf dem anderen Pi. Hat dieses alert.py dort schon funktioniert?

    Uns den Code davon zu zeigen wäre auch von Vorteil.

    Alternativ ein Bash-Script zum aufrufen erstellen und dieses in rc.local eintragen oder das mit cron starten

    @reboot python /pfad/alert.py

    oder die systemd unit erstellen

    https://wiki.ubuntuusers.de/systemd/Service_Units/
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

  13. #13
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.149
    Warning: Unit file changed on disk, 'systemctl daemon-reload' recommended.
    Das will dir sagen, dass du, wenn du drin rumgefummelt hast, einen Befehl ausführen sollst, der systemd den ganzen Krempel neu einlesen lässt.
    Dieser Befehl wird dir sogar recommended:
    Code:
    systemctl daemon-reload
    Es gibt noch ein paar mehr solcher Befehle, die in solchen Situationen helfen können. Ein systemctl <tab><tab> samt anschliessendem Studium der jeweiligen manpages gibt Aufschluss.

    Und gewöhne dir endgültig relative Pfade in Scripts ab, die via cron oder systemd gestartet werden.
    /usr/bin/python2.7 oder, was auch immer du wirklich brauchst, aber niemals einfach nur python.

    Da es bei diesen Aufrufarten meist kein Terminal gibt,
    sollte man auch peinlichst immer STDOUT und STDERR umleiten.
    Ist sicherer, wenngleich nicht immer nötig. Manche Tools schreiben dann von sich aus in eine vorher festgelegte Datei, manche einfach in's Systemprotokoll.
    Geändert von BetterWorld (27.01.17 um 14:20 Uhr)

  14. #14
    Registrierter Benutzer
    Registriert seit
    Dec 2014
    Beiträge
    13
    @florian0285:
    Nein ich habe den Pfad öfter überprüft und sogar kopiert. Sollte nicht der Fehler sein.

    Falls es hilft hier der Code der "alert.py":
    import urllib2
    import time

    try:
    while True:
    file = open("/var/www/other/alert/switch.html", "r")
    switch = file.read()
    file.close()
    if switch == "true":
    print "Updating..."
    content = urllib2.urlopen("http://192.168.***.**/alert/alert.html").read()
    file = open("/var/www/other/alert/alert.html", "w+")
    file.write(content)
    file.close()
    time.sleep(300)
    except KeyboardInterrupt:
    print "\nExit..."
    file.close()
    except:
    dat = open("error.txt", "w+")
    dat.write("Unknown error!")
    dat.close()
    Wie es aussieht wird das Skript nicht mal gestartet. Wenn ich aber ein anderes Skript mit einem Inhalt wie diesem erstelle läuft es zwar aber die Datei "blub.txt" wird nicht erstellt... Manuell geht es aber auch.
    import time

    i = 0
    while True:
    file = open("blub.txt", "w+")
    file.write(str(i))
    file.close()
    i = i + 1
    time.sleep(1)

  15. #15
    Elefantenversteher Avatar von florian0285
    Registriert seit
    Jun 2016
    Beiträge
    1.019
    Der Code ist jetzt am Handy schlecht zu lesen... was auffälliges fällt mir erstmal nicht auf. Das Ding wirft auch nicht den Fehler in die Error.txt? Die Dateien sollten in / erstellt werden also /blub.txt /error.txt

    Der zweite kleine Schnipsel läuft bei mir durch und legt die /blub.txt an.

    Bau mal print Anweisungen vor den try Block, in den try Block und in exception. Print 1, 2 und 3. Leite die Ausgabe um "python bla.py > out.txt" und schau ob er alles ausspuckt. Wenn nein bau an den Blöcken weiter print's ein.
    Matthäus 7:3 Was siehst du aber den Splitter in deines Bruders Auge, und wirst nicht gewahr des Balkens in deinem Auge?

Ähnliche Themen

  1. ip-up.local startet nicht
    Von JPMonti im Forum System installieren und konfigurieren
    Antworten: 2
    Letzter Beitrag: 28.11.05, 10:29
  2. Antworten: 31
    Letzter Beitrag: 04.09.05, 15:15
  3. ip-up.local ist nicht da?
    Von dsplauen im Forum Router und Netzaufbau
    Antworten: 2
    Letzter Beitrag: 08.06.04, 20:33
  4. boot.local oder rc.local DEBIAN
    Von sprudel123 im Forum System installieren und konfigurieren
    Antworten: 1
    Letzter Beitrag: 21.08.02, 23:09
  5. ip-up.local tut nicht das, was sie soll
    Von Zambo im Forum Linux als Server
    Antworten: 1
    Letzter Beitrag: 06.12.01, 10:45

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •