script Autostart

  • Hallo in die Runde,

    ich habe hier ein Problemchen, was sicher schon hunderte andere hatten, viiele von den Forenlösungen habe ich schon probiert, aber ohne Erfolg.

    Ich möchte ein Python3 Programm beim Start vom Pi automatisch in einem Termianl ausführen. Raspberry ist ein 2B, OS Bullseye.
    Ich habe Hinweise zu 4 Methoden gefunden, crontab, rc.local. system service und das Autostart-Verzeichnis, aber aus irgendeinem Grunde bekomme ich keins davon zum Laufen.
    Am liebsten wäre mir die Desktop Version mit dem Autostart-Verzeichnis. Was ich jetzt habe ist eine . desktop Datei im Verzeichnis /home/"User"/.cnfig/autostart mit dem Namen CalProgStart.desktop.

    Code
    [Desktop Entry]
    Name=CalibrationProgrammStart
    Comment=Starten des python-Kalibrierprogramms im Terminal
    Exec=sleep 10 && /bin/lxterminal -e /usr/bin/python3 /home/CalUnit/Documents/Calibration.py

    die Exec Zeile funktioniert im Terminal einwandfrei. Sowohl die *.desktop Datei als auch die Calibration.py sind in den Rechten ausführbar. Wenn ich diese Zeile in crontab -e, sudo crontab -e oder sudo nano crontab -e mit @reboot eintrage passiert auch nix. Auch mit einem Link im crontab auf eine *.sh gehts, in der dann der Aufruf steht, läufts nicht.

    Wo liegt da mein Fehler?

    Gruß

    Ed

  • Hallo,

    Quote

    Ich möchte ein Python3 Programm beim Start vom Pi automatisch in einem Termianl ausführen.

    Heißt konkret, dass du die Ausgabe des Programms sehen willst? Also im Prinzip so, als würdest du es manuell machen? Oder soll das Programm "nur" irgendwie 1x durchlaufen, wenn du den Pi (neu) startest?

    Grundsätzlich: rc.local ist total veraltet -> nutzt man nicht mehr. cron ist eher für periodische Aufgabem und im Prinzip durch systemd und systemd Timer Units abgelöst.

    Gruß, noisefloor

  • die Exec Zeile funktioniert im Terminal einwandfrei. Sowohl die *.desktop Datei als auch die Calibration.py sind in den Rechten ausführbar. Wenn ich diese Zeile in crontab -e, sudo crontab -e oder sudo nano crontab -e mit @reboot eintrage passiert auch nix. Auch mit einem Link im crontab auf eine *.sh gehts, in der dann der Aufruf steht, läufts nicht.

    Im Terminal als root, weil Du die root-crontab benutzt?

    Was macht dein Script, weil es im Vordergrund (Terminal) gestartet werden soll?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden
    "Das dauert plötzlich ½ Sekunde länger. Das muss ich mir anschauen!" - Andres Freund

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.5 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server, botamusique, ample

  • Immer absolute Pfade verwenden.

    Code
    [Desktop Entry]
    Name=CalibrationProgrammStart
    Comment=Starten des python-Kalibrierprogramms im Terminal
    Exec=/home/CalUnit/Documents/Calibration.sh

    Dann eine /home/CalUnit/Documents/Calibration.sh anlegen.

    Bash
    #!/usr/bin/bash
    /usr/bin/sleep 10 && /usr/bin/python3 /home/CalUnit/Documents/Calibration.py

    Ausführbar machen.

  • Hallo,

    Das Script steuert 7 GPIO, die Ventile schalten. Der Ablauf ist zeitgesteuert, aber man kann auch durch Eingabe im Terminal die Ventile manuell ansteuern. Ausserdem zeigt das Terminal den Status an, also welche gerade geschaltet sind. Das kann dann auch einfach über VNC kontrolliert und bedient werden. So mein Ansatz

  • Bei einer ähnlichen Aufgabenstellung habe ich auch lange herumprobiert...

    Was nun gut funktioniert ist eine Auslagerung des Aufrufs in ein Script:

    Code
    pi@pi400:~ $ cat .config/autostart/meinstart.desktop
    [Desktop Entry]
    Name=WLAN Hotspot
    Exec=meinstart.sh
    Type=Application
    
    
    pi@pi400:~ $ cat ~/bin/meinstart.sh
    #!/usr/bin/env bash
    lxterminal --geometry=100x30 -e "<mein eigentliches zu startendes Programm>"


    Edit: Zu lange getippt... :sleepy:

  • Das kann dann auch einfach über VNC ... bedient werden.

    "kann" aber "muss" nicht? D. h. es gibt eine default Einstellung, mit timeout?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden
    "Das dauert plötzlich ½ Sekunde länger. Das muss ich mir anschauen!" - Andres Freund

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.5 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server, botamusique, ample

  • mistered313 Problematisch ist hier, dass das Terminalfenster wieder zugeht sobald das Programm beendet ist. Auch wenn es durch eine Ausnahme endet. Die sieht man dann nicht, beziehungsweise zu kurz um es lesen zu können. Da könnte eine Logdatei hilfreich sein um zu schauen wie weit das Programm kommt.

    “It is easier to optimize correct code than to correct optimized code.” — Bill Harlan

  • Bei der Ursachensuche hilft dex!

    Bash
    sudo apt install dex

    Damit kann man u.a. schauen, welche Programme autostarted würden und sie auch per .desktop-Datei manuell (im Terminal) starten:

    dex -ad listet alle Autostarts auf.

    dex -d ~/.config/autostart/meinstart.desktop zeigt an, was in dieser .desktop gestartet würde

    dex ~/.config/autostart/meinstart.desktop startet es. Und zeigt eventuelle Fehlermeldungen an!

  • desktop-file-validate

    Oh, wieder neue Kommandos dazu gelernt, danke!

    Man kann natürlich auch einfach mal einen Doppelklick auf das Icon machen und sehen was passiert.

    Klar, aber je nach drunterliegendem Programm bzw. Problem sieht man dann die eventuelle Fehlermeldung nur für Sekundenbruchteile.
    Deshalb finde ich während des Testens den Aufruf im Terminal über dex hilfreich.

  • Hallo,
    das Beste vorab: Es läuft!
    Und jetzt erstmal Antworten und Grund:
    Ich habs jetzt wie von@fred0815 und simonz vorgeschlagen in 2 Datien geteilt, einmal eine *.desktop im autostart, die auf die *.sh im home-Verzeichnis verweist. Zusätzlich musste der Pfad statt /bin/bash /usr/bin/env bash heissen, dann ging es. Ausführbar waren beide Dateien

    Danke für das "dex" . lxterminal war schon richtig.
    rpi444 Wenn Bildschirm usw angeschlossen sind, kann es direkt bedient werden. Das wird aber im laufenden Betrieb nicht der Fall sein, der Pi ist im Gehäuse mit den Ventilen und nur ans Netzwerk angeschlosen. Grundsätzlich sollte der endlos laufen, aber um Eingaben von Hand zu machen oder das Script anzuhalten kann man dann VNC nutzen.

    Danke nochmal an alle!

    Ed

  • ... um Eingaben von Hand zu machen oder das Script anzuhalten kann man dann VNC nutzen.

    Das könnte man aber auch mit ssh statt mit VNC machen, oder?

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden
    "Das dauert plötzlich ½ Sekunde länger. Das muss ich mir anschauen!" - Andres Freund

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.5 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p6 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server, botamusique, ample

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!