Crontab -e funktioniert nicht. OLED Bildschirm eingefroren.

  • Hallo Leute habe gleich zwei Probleme.


    Ich habe es endlich geschafft mein Raspberry Pi mit einem OLED Bildschirm zu verbinden. Mit einem Script von Adafruit zeigt es mir auf dem OLED Bildschirm mein Ram, speicher usw an.
    Ich finde es aber lästig das ich den Bildschirm jedes mal Manuell starten muss und habe mir dazu Videos angesehen und da meinte man über Crontab -e geht das. Leider Funktioniert es nicht.
    ich schrieb in Crontab folgendes: @reboot pyhton /pfad/scriptname.py &. Natürlich nicht 1 zu 1 so wie es da gerade steht.
    Jedes mal wenn ich mein Raspberry Pi starte, erscheint wie immer erstmal mein Retro Pie. Aber beim OLED Bildschirm tut sich nichts.


    Problem nummer 2 wäre das ich an mein Raspberry Pi ein stresstest gemacht habe. Die werte sieht man zwar am terminal da es jede Sekunde die Temperatur misst, jedoch am OLED Bildschirm zeigt es immer das selbe Ergebnis an wenn ich es Manuell starte.

    Ich hoffe ihr könnt mir da weiterhelfen.

    Dankeschön im Vorraus

  • Hallo,


    um ein Skript beim Systemstart zu starten ist eigentlich eine systemd Service Unit der besser / aktueller Weg. Damit kannst du auch bestimmen, wann (also in Abhängigkeit von welchen anderen Diensten) das Skript startet, du bekommst automatisch einen Log ins Journal von systemd, die kannst das Skript automatisch starten lassen, wenn es crasht und noch ein paar andere Sachen.


    Gruß, noisefloor

  • @reboot pyhton /pfad/scriptname.py &.

    Wichtig zu wissen, wäre auch die komplette und korrekt hierher übertragene Zeile. Selbst wenn Du python (falsch: pyhton) richtig schreiben würdest, heißt das noch lange nicht, dass es auch gefunden wird. Benutze absolute Pfade: /pfad/zum/programm/ausführbare_datei

  • Wichtig zu wissen, wäre auch die komplette und korrekt hierher übertragene Zeile. Selbst wenn Du python (falsch: pyhton) richtig schreiben würdest, heißt das noch lange nicht, dass es auch gefunden wird. Benutze absolute Pfade: /pfad/zum/programm/ausführbare_datei

    also die zeile ist:
    @reboot python /home/pi/python/SSD1306/SSD1306.py


    Die Crontab weiß vermutlich nicht, wo es diese Infos ausgeben soll. Such mal nach DISPLAY=:0 o.ä.

    Wo such ich das den? bin noch ein totaler Linux anfänger.

    Hallo,


    um ein Skript beim Systemstart zu starten ist eigentlich eine systemd Service Unit der besser / aktueller Weg. Damit kannst du auch bestimmen, wann (also in Abhängigkeit von welchen anderen Diensten) das Skript startet, du bekommst automatisch einen Log ins Journal von systemd, die kannst das Skript automatisch starten lassen, wenn es crasht und noch ein paar andere Sachen.


    Gruß, noisefloor

    Neben LXDE-pi und crontab -e habe ich das auch versucht aber auch das hat nicht Funktioniert.


    Also als ich gerade mein PI hochgefahren habe und ich Ausversehen F5 gedrückt habe hat der Bildschirm zwar reagiert aber hat etwas total verschwommenes angezeigt.

  • Tut mir leid hab ich glatt vergessen.

    Den Code habe ich von Github.

    Wenn ich ihn manuell starte funktioniert er.
    Als ich gerade bisschen rumprobierte hat es auf einmal jedes mal wenn ich F5 beim booten gedrückt habe, den Bildschirm flackernd und und verschoben hochgefahren und jetzt geht es wieder gar nicht. :wallbash:
    Weiß nicht genau was da los ist. Weiß nicht mal was F5 beim hochfahren tut :whistling:

  • also die zeile ist:
    @reboot python /home/pi/python/SSD1306/SSD1306.py

    Du kannst Dich an dieser Stelle nicht drarauf verlassen, dass python überhaupt gefunden wird. which python verrät Dir den kompletten Pfad und das trägst Du dann dort ein.

    Nur am Rande: Der Support für Version 2.x des Python Interpreters wurde eingestellt. Es empfielt sich, auf V3 zu wechseln.


    Besser wäre trotzdem, den Start einer systemd unit zu überlassen.


    Such mal nach DISPLAY=:0 o.ä.

    Das brauchst Du nicht, da es sich wohl um solch ein Display handelt.


    Neben LXDE-pi und crontab -e habe ich das auch versucht aber auch das hat nicht Funktioniert.

    Dies ist keine korrekte Beschreibung. Was hast Du genau getan, was hat nicht funktioniert? Gab es Fehlermeldungen?

    Den Code habe ich von Github.

    Wenn ich ihn manuell starte funktioniert er.

    Ja natürlich. Du rufst ihn im Kontext des angemeldeten Nutzers (wahrscheinlich pi) auf, und die vielen externen Aufrufe klappen auch.


    Als ich gerade bisschen rumprobierte hat es auf einmal jedes mal wenn ich F5 beim booten gedrückt habe,

    Was genau meinst Du damit? Wann ist den in Deiner Erfahrung "beim booten"?


    Gruß, STF

  • Quote

    Du kannst Dich an dieser Stelle nicht drarauf verlassen, dass python überhaupt gefunden wird. which python verrät Dir den kompletten Pfad und das trägst Du dann dort ein.

    Nur am Rande: Der Support für Version 2.x des Python Interpreters wurde eingestellt. Es empfielt sich, auf V3 zu wechseln.

    Kannst du mir das mit dem Which Python genauer erklären ? wo kommt das rein und wie wechsel ich die Version?

    Also bei Systemd folgte ich dieser Anleitung


    Similar to crontab, you're going to have to direct a process to your script.

    In this instance, you'll create an init script that points to your script just like the crontab does.

    Create this file...

    Code
    /etc/systemd/system/myscript.service

    Which contains...

    "Whatever Your Script Does Here" can be anything.

    Your script is then a service that is started by typing... sudo systemctl start myscript

    And stopped by typing... sudo systemctl stop myscript

    Typing this... sudo systemctl enable myscript ... Enables the script to automatically start after reboots and startups.



    Was ich mit beim booten meine kurz bevor der Desktop da ist drückte ich F5 dann kamen 3 lade punkte anschließend ging der Bildschirm an aber Fehlerhaft.




    Und ja das war so ein Display

  • Which Python

    which python (Alles klein!) gibst Du auf der Kommandozeile ein und es spuckt Dir den Pfad zur ausführbaren Datei aus. Das kannst Du versuchen, einzutragen. Ich denke jedoch, dass auch dies nicht funktioniert, denn es scheint ja so, als ob Dein Skript gestartet wird. Es wird wohl irgendetwas nicht finden können, was zum Betrieb benötigt wird.


    Create this file...

    ...

    Which contains...

    Und? Was genau haste da nun eingetragen?

    Was ich mit beim booten meine kurz bevor der Desktop da ist drückte ich F5 dann kamen 3 lade punkte anschließend ging der Bildschirm an aber Fehlerhaft.

    :gk1:

  • Wenn ich es Manuell starte mit Python ohne eins Versionswechsel läuft es wie geschmiert. Nur beim Hochfahren scheint es dann wohl das gewisse etwas nicht zu finden.

    Ich habe nur diese Zeile geändert und trug das ein
    ExecStart=/home/pi/python/SSD1306/SSD1306.py

  • Bitte keine Beispieldateien sondern deine


    ExecStart=/home/pi/python/SSD1306/SSD1306.py

    Das kann auch so nicht funktionieren, denn der Datei fehlt ein Shebang und selbst wenn müsstest du sie noch ausführbar machen.


    Mein bevorzugter Weg ist jedoch den Interpreter explizit mit anzugeben:

    ExecStart=/usr/bin/python3 /home/pi/python/SSD1306/SSD1306.py


    Benötigt das Skript root Rechte? Wenn nein so ist die Service Unit unvollständig und gehört ergänzt, dass der User Pi das Skript startet

  • gewisse etwas nicht

    Das sagte ich bereits.

    ExecStart=/home/pi/python/SSD1306/SSD1306.py

    Da wird genau nochmal gar nichts passieren, denn das Skript besitzt keinen Shebang.Du findest hier eine Anleitung, wie es funktioniert.


    Ergänzung: Lies die Anleitung bis zum Schluss, dort stehen noch wichtige Informationen.


    Edith sagt: Der Hofei war schneller. :thumbup:

  • Benötigt das Skript root Rechte? Wenn nein so ist die Service Unit unvollständig und gehört ergänzt, dass der User Pi das Skript startet

    Also ich muss es also so eintragen:

    "ExecStart=/usr/bin/python3 /home/pi/python/SSD1306/SSD1306.py"
    wird Probiert.

    dein Letzten Satz verstehe ich nicht ganz. wie gebe ich dem script root rechte ?

    Ich werde einfach mal der verlinkten Anleitung folgen

    Aufjedenfall danke euch beiden für eure Hilfe :danke_ATDE:

  • Also ich empfehle dir dringendst python3 zu verwenden.


    Jetzt postest du noch bitte DEINE aktuellen Unit Files, und dann sehen wir wie wir zum Ziel kommen


    Was erhältst du denn bei folgendem Befehl (einfach ins Terminal tippen)?


    sudo python /home/pi/python/SSD1306/SSD1306.py


    und einmal

    python3 /home/pi/python/SSD1306/SSD1306.py


    Fehlerausgaben bitte vollständig posten

  • python3 /home/pi/python/SSD1306/SSD1306.py


    Da erhalte ich diese Fehlermeldung:


    Traceback (most recent call last):

    File "/home/pi/python/SSD1306/SSD1306.py", line 23, in <module>

    import Adafruit_GPIO.SPI as SPI

    ModuleNotFoundError: No module named 'Adafruit_GPIO'



    sudo python /home/pi/python/SSD1306/SSD1306.py


    Fehlermeldung:


    Traceback (most recent call last):

    File "/home/pi/python/SSD1306/SSD1306.py", line 103, in <module>

    font = ImageFont.truetype('Montserrat-Light.ttf', 12)

    File "/usr/lib/python2.7/dist-packages/PIL/ImageFont.py", line 280, in truetype

    return FreeTypeFont(font, size, index, encoding, layout_engine)

    File "/usr/lib/python2.7/dist-packages/PIL/ImageFont.py", line 145, in __init__

    layout_engine=layout_engine)

    IOError: cannot open resource


    Habe gemerkt das es auch nur mit python befehl funktioniert wenn ich es manuell mit Python 3 ausführe im Terminal bekomme ich das:


    Traceback (most recent call last):

    File "SSD1306.py", line 23, in <module>

    import Adafruit_GPIO.SPI as SPI



    Verzeichnis: /etc/systemd/system

    Meine Unit Datei:

    [Unit]

    Description=My service

    After=network.target


    [Service]

    ExecStart=/usr/bin/python -u SSD1306.py

    WorkingDirectory=/home/pi/python/SSD1306

    StandardOutput=inherit

    StandardError=inherit

    Restart=always

    User=pi


    [Install]

    WantedBy=multi-user.target


    Ist das so richtig?