Python Script automatisch starten lassen - Fehler

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo liebe Raspberry Gemeinde,
    auch wenn der Titel so klingt als wäre das Thema schon 10 mal beantwortet worden, so habe ich bisher nichts gefunden, was mir bei meinem Problem hilft:

    Ich habe ein Script geschrieben, was mit Hilfe vom apscheduler jeden morgen um 2 Uhr loslaufen soll. Ich habe das ganze mit @reboot in die crontab (sowohl als root, wie auch als pi) geschrieben um das script jedes mal beim hochfahren im Hintergrund starten zu lassen. Geschieht dies nun und das Programm läuft los erhalte ich einen Fehler:

    Code
    IndexError: list index out of range


    Prinzipiell ist es klar, was mir dieser Fehler sagen will. Was ich allerdings nicht verstehe ist, wieso dieser Fehler nur auftritt, wenn das Programm automatisch gestartet wird (rc.local, etc. habe ich auch schon durch).
    Starte ich das Script nun also aus der Kommandozeile, so funktioniert es einwandfrei, so wie ich mir das wünsche.

    Kennt jemand dieses Problem? Was kann ich dagegen tun?

    Viele Grüße
    Assispachtel

  • Ist dir wirklich klar, welcher Index das ist?

    Im Übrigen muss man, wenn man Programm automatisch startet, alle notwendigen Einstellungen (speziell die PATH-Variable) für die Umgebung in dem Programm, oder der Aufrufumgebung, definieren, da diese nicht aus der Umgebung, die ausgeführt wird, wenn ein Benutzer sich anmeldet, mitgebracht wird.

    Und noch ein Tipp:

    Man lässt in der Zeit zwischen 02:00 Uhr und 02:59 Uhr keine Script/Programme/Tools automatisch Sachen durchführen, außer, es ist egal, dass sie nie oder doppelt ausgeführt werden.

    Zwei mal im Jahr gibt es sonst massig Probleme.

    So gibt es dieses Jahr, am 27.3.2016, zwischen 01:59 und 03:00 Uhr keinen automatischen Lauf solcher Programme, und am 30.10.2016 werden zwischen 01:59 und 03:00 alle Aufrufe zwei mal durchgeführt.

    Computer ..... grrrrrr

  • Hallo und danke für deine schnelle Antwort.
    Ja, das stimmt alles soweit.

    Aber genau das scheint die Antwort zu sein, die ich gebraucht habe! Ich dachte nämlich, dass, solange ich das Programm als Pi (ausm Crontab) starte, auch die Path-Variable bekannt ist. Das erklärt dann natürlich, wieso das Programm dann nichts findet. (Danke!)

    Das ist auch eine gute Anmerkung, wird geändert.

  • Ohne das Script zu sehen kann man dazu nicht viel sagen.

    Vermutlich nutzt du ein Dictionary was zuvor befüllt wird, aber dort hast du halt eine Abfrage auf ein Index was dann nicht existiert....


    Im Übrigen muss man, wenn man Programm automatisch startet, alle notwendigen Einstellungen (speziell die PATH-Variable) für die Umgebung in dem Programm, oder der Aufrufumgebung, definieren, da diese nicht aus der Umgebung, die ausgeführt wird, wenn ein Benutzer sich anmeldet, mitgebracht wird.

    Das stimmt nicht ganz.
    Es kommt darauf an Wo es eingetragen wird. Im Fall von Crontab wird durch aus eine PATH Umgebungsvariable verwendet, aber eben eine Standardisierte, nicht die individuelle des Benutzers. Wobei selbst das nicht 100% korrekt ist: Die Systemcrontab führt den Befehl über einen bestimmten Benutzer aus und dann wird auch die PATH des jeweiligen Benutzers verwendet.
    Allgemein rät man dazu lieber absolute Pfade zu verwenden um zumindest dabei nicht von einer Umgebungsvariablen abhängig zu sein.

    Desweiteren widerspricht die Fehlermeldung ebenfalls deiner Aussage, denn das Script wurde ja ausgeführt, nur gab es vom Script selbst eine Fehlermeldung.

  • Ich möchte auf ein Dictionary zugreifen, das Verbindungsinformationen für eine Datenbank enthält. Diese Datei existiert und ließ sich auslesen, wenn das Programm von der Commandline gestartet wurde. Wurde das Programm allerdings mit @reboot gestartet wurde der oben genannte Fehler geworfen. Das lag nun daran, dass der Pfad nicht absolut angegeben wurde und somit die Datei nicht geöffnet werden konnte und somit auch nicht auf die eingelesenen Sections zugreifen konnte - daher der Fehler. Nach der angabe des absoluten Pfads scheint das zu funktionieren.

  • Zitat

    ... da diese nicht aus der Umgebung, die ausgeführt wird, wenn ein Benutzer sich anmeldet, mitgebracht wird


    unterscheidet sich von

    Zitat

    Im Fall von Crontab wird durch aus eine PATH Umgebungsvariable verwendet, aber eben eine Standardisierte, nicht die individuelle des Benutzers.


    genau durch was?

    Und mit

    Zitat

    Allgemein rät man dazu lieber absolute Pfade zu verwenden um zumindest dabei nicht von einer Umgebungsvariablen abhängig zu sein.

    relativierst du deine Aussage wieder.

    Am einfachsten ist es zu sagen:

    "Automatisch gestartete Programme müssen ihre gesamte benötigte Umgebung selber mitbringen."
    (Weil man dadurch auch durch Änderungen, die das System, oder der Benutzer in der Umgebung vornehmen kann, (relativ) verschont wird.)

    Computer ..... grrrrrr

  • Rasp-Berlin: Du verdrehst meine Aussage. Lies bitte noch mal was ich schrieb.

    Man rät allgemein dazu - weil das einfacher ist. Es kommt aber genau genommen darauf an WIE man "Autostart" umsetzt. Es ist faktisch falsch das generell/allgemein KEIN PATH vorhanden wäre - was du aber geschrieben hast.

    Da das Script von Assispachtel gestartet wurde liegt es _nicht_ an PATH. Den tatsächlichen Fehler hat er selber gefunden und steht über deinem Beitrag - bei dem Problem hilft auch keine Umgebungsvariable.

  • "Automatisch gestartete Programme müssen ihre gesamte benötigte Umgebung selber mitbringen."
    (Weil man dadurch auch durch Änderungen, die das System, oder der Benutzer in der Umgebung vornehmen kann, (relativ) verschont wird.)


    Das ist absolut richtig - kennt aber leider von nicht IT-erfahrenen Leuten keiner. Deshalb gibt es ja leider diese ewigen Postings zu diesem Thema 'Programm funktioniert - aber nicht mit cron'
    Assispachtel: Ist nicht negativ an Dich gerichtet. Du bist nur ein weiterer n+1 ter der dieses Problem im Forum anspricht. :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!