Autostart

  • Hallo,

    ich möchte ein Programm welches ich kompiliert habe automatisch starten lassen.
    Wollte es in die rc.local Datei packen aber so einfach geht es wohl nicht. Muss ich hierfür erst ein Skript erstellen, dort den Pfad der ausführbaren Datei definieren und das Skript in der rc.local Datei aufrufen?

    Gruß

    Einmal editiert, zuletzt von Dillinger (14. August 2015 um 17:36)

  • Hallo Dillinger,

    richtig gut ist, das Du etwas selber probiert hast!
    Gut ist auch, dass Du angedeutet hast, wie Du es versucht hast!

    Statt einen neuen Thread zu eröffnen und nach etwas zu fragen, wonach vor Dir schon zig andere gefragt haben, hättest Du die Forensuche bemühen können. Dann hättest Du diesen hier gefunden - und die Lösungsansätze für Autostart gefunden.

    EDIT: 14-OKT-2017 Ich hoffe sehr, dass die FAQ-/Linksammlung eines Tages selber aktualisiert vorliegen möge.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas (14. Oktober 2017 um 14:07)


  • Lieber Andreas,

    ich nehme an du meinst diesen Link hier: Automatisches Starten von Scripte / Programme ( Autostart )
    das habe ich bereits gemacht. Leider beantwortet das nicht meine Frage.

    Ich weis immer noch nicht sicher, ob ich jetzt ein extra Skript brauche (das ich dann in rc.local aufrufe) oder nicht.


    Auch finde ich im Thread keine Anleitung wie ich ein rc.local Autostart erstelle.

    Zitat

    rc.local Script

    Wenn Ihr Runlevel unabhängige Scripte ausführen wollt lohnt sich ein blick in die /etc/rc.local
    Datei. Dort könnt ihr an das Ende (Vor dem exit(0)) eure Scripte / Befehle einfügen.
    Dieses Script wird von jedem Runlevel aufgerufen.


    Ich habe jetzt ein Skript nach dieser Anleitung erstellt:
    http://www.raspberry-projects.com/pi/pi-operatin…aspbian/scripts

    Wenn ich das Skript mittels Terminal ausführe, startet mein Programm. Nur eben bei Programmstart nicht. Über das Skript starte ich auch 2 Hardwaremodule, welche ich davor direkt ueber rc.local gestartet habe. Sie starten aber auch mittels Skript, was bedeutet, dass das Skript beim Start korrekt ausgeführt wird.

    Dann werfe ich gleich noch eine weitere Frage in den Raum. Wenn ich eine GUI starten möchte, ist der Start des Desktops dann nötig? Das Raspi soll einfach direkt in die GUI im Vollbildmodus starten.
    Das hier habe ich dazu gefunden:
    Python GUI in Autostart laden
    Hier wird zum einen das Programm direkt über das rc.local File geladen (ohne Skript) aber ob ich den Desktop für die GUI starten muss, weis ich noch nicht genau.


    Anstatt einen eigenen Thread zu erstellen, könnte ich natürlich auch im obigen ersten verlinkten meine Frage stellen. Ein paar andere User haben das gemacht und wurden darauf verwiesen, eigene Threads zu erstellen mit Ihren Fragen. Was denn nun? Vielleicht bin ich auch einfach nur zu doof. Naja jedenfalls freue ich mich über Hilfe. :thumbs1:


    Für Individuelle Probleme bitte einen eigenen Thread erstellen!

    Wenn hier jeder sein Problem in den Anleitungs-Threads postet, werden diese ziemlich schnell rappel voll und unübersichtlich!


    Für individuelle Probleme bitte einen eigenen Thread erstellen.
    ...


    1. Für individuelle Probleme bitte einen eigenen Thread erstellen. Wenn jeder sein Anliegen in die Anleitungs-Threads mit rein schmeißt werden diese sehr schnell sehr unübersichtlich!
    ...


    Lg Dillinger

  • Also alles kann ich jetzt nicht beantworten, aber


    ...
    Ich weis immer noch nicht sicher, ob ich jetzt ein extra Skript brauche (das ich dann in rc.local aufrufe) oder nicht.
    ...


    Hm ... also: scripte oder Befehle ... heisst: wenn Du mehr als ein Kommando hast, würde ich das in einem script zusammenfassen - der Einfachheit halber


    ...
    Wenn ich das Skript mittels Terminal ausführe, startet mein Programm. Nur eben bei Programmstart nicht.
    ...


    dazu gibts hier im Forum auch schon hunderte Threads ... immer wieder gern gemachter Fehler: keine absoluten Pfade angegeben ...
    Aber ohne das script zu kennen, können wir jetzt nur spekulieren ...


    ...
    ist der Start des Desktops dann nötig?
    ...


    den Desktop brauchst Du nicht - aber X muss laufen. Um ein startx kommst Du also nicht drumherum.

    cu,
    -ds-

  • Hallo,

    Danke.

    Das Skript der Vollständigkeit halber:

    Bash
    #!/bin/bash
    # Script to start our application
    echo "Doing autorun script..."
    sudo /home/pi/projekte/prog1/bin/Debug/prog1 & //ausführbare Datei

    Datei heisst und liegt in

    Code
    /home/pi/bin/script_auto_run

    Anschliessen habe ich folgendes in den Terminal gehackt:
    [font="Menlo, Monaco, Consolas, Courier New, monospace"]

    Code
    sudo chmod 755 script_auto_run

    [/font]

    in rc.local steht:

    Code
    //was automatisch drin stand
    
    
    /home/pi/bin/script_auto_run &
    
    
    exit 0

    Anmerkung: habe es auch einmal ohne "&" hinter script_auto_run probiert, aber es gehört ja sowieso hin um das System eventuell nicht zu blockieren.
    --
    Ok dann werd ich mich in xstart mal reinlesen. Ich nehme an, dass das aber auch nur eine Alternative ist und ich auch erst in Desktop und dann die Gui starten könnte? Dafür bräuchte ich dann kein xstart.

    Einmal editiert, zuletzt von Dillinger (15. August 2015 um 18:19)

  • mal so aus dem Bauch: das sudo im script ist imho eh unnötig, weil die rc.local afaik als root ausgeführt wird.

    Das andere Ding heisst nicht xstart sondern startx und startet zunächst mal nur den X-Server, den Du auf alle Fälle brauchst, wenn Du was grafisches darstellen willst.
    Inwiefern da jetzt noch Desktop-Zeugs aufploppt ist abhängig von der Konfiguration ...

    cu,
    -ds-

  • Der häufigste Fehler ist, dass Programme benutzt werden und sie nicht mit dem vollen Pfad angesprochen werden.

    Normalerweise sollte man in einem Script, welches ein bestimmtes Programm aufruft alle Umgebungsbedungungen für das Script setzen und dann das Programm aufrufen. Dazu gehört z.B. auch der Pfad wie auch Datenbankeinstellungen, TCP Ports usw. Dazu hast Du ja /home/pi/bin/script_auto_run.

    Das kannst Du ganz einfach erreichen. Dazu melde Dich als Benutzer an mit dem das Programm durchläuft.

    Dann folgenden Befehl ausführen:

    Code
    sed -i "/# Script/ a $(echo export PATH=\$PATH:$PATH)" /home/pi/bin/script_auto_run

    Dadurch wird der aktuelle Pfad in Dein Script eingepflegt.

    Danch noch

    Code
    sed -i "s/sudo[[:blank:]]\+//g" /home/pi/bin/script_auto_run


    um das sudo rauszunehmen, denn wie ds schon schrieb: rc.local wird als root ausgeführt

  • dreamshader danke ich arbeite mich rein.

    framp das 2. hat funktioniert.
    Beim ersten Befehl ist nichts neues in das Skript geschrieben worden. Habe meinen eigenen Pfad auch kurz aus dem Skript auskommentiert gehabt.
    Ich habe mich aber nicht extra anders angemeldet. Das Programm kann ruhig über den Standardbenutzer ausgeführt werden.
    Damit wir uns verstehen, ich habe das über den Terminal im Desktop ausgeführt, d.h. ich bin ja als "pi" angemeldet.

    Gruß

  • Beim ersten Befehl ist nichts neues in das Skript geschrieben worden. Habe meinen eigenen Pfad auch kurz aus dem Skript auskommentiert gehabt.
    ...

    Dann hast Du wohl Dein Script mittlwerweile schon wieder geändert. Dann die ausführliche Beschreibung:

    (1) echo $PATH liefert Dir den aktuellen Pfad des Benutzers mit dem das Programm funktioniert (z.B. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games)
    (2) In dein bash Script fügst Du gleich am Anfang ein:

    Code
    export PATH=$PATH:<path>

    wobei <path> das Ergebnis von (1) ist, also z.B.

    Code
    export PATH=$PATH:usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
  • Dann hast Du wohl Dein Script mittlwerweile schon wieder geändert. Dann die ausführliche Beschreibung:

    (1) echo $PATH liefert Dir den aktuellen Pfad des Benutzers mit dem das Programm funktioniert (z.B. /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games)
    (2) In dein bash Script fügst Du gleich am Anfang ein:

    Code
    export PATH=$PATH:<path>

    wobei <path> das Ergebnis von (1) ist, also z.B.

    Code
    export PATH=$PATH:usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games


    Zu 1.
    Aeh, also nochmal, mein Skript heisst "script_auto_run" und liegt in "/home/pi/bin/"
    gesamter Pfad also: "/home/pi/bin/script_auto_run"

    Die Datei sieht so aus:

    Code
    #! /bin/bash       //warum da bash steht weis ich nicht
    # eigener Text...         //ist auskommentiert also egal was hier steht?!
    echo "text"        //auch egal was hier steht
    /home/pi/.../.../bin/Debug/... &        //ist der genaue Pfad der ausführbaren Datei wichtig für deine Codezeile? ich dachte nicht, deshalb hab ich auch irgendein erfundenes Verzeichnis angegeben
    
    
    #anderer text
    /...       //2 andere Befehle haben nichts mit der GUI zutun. Oh, die werden wahrscheinlich deine Codezeile falsch beeinflussen, weshalb es nicht funktioniert?
    /...


    "//" = Kommentare

    Zu 2. genau, ich schreibe dann in die script_auto_run Datei:

    Code
    export PATH=$PATH:"der zurückgegebene Pfad der ausführbaren Datei ohne Anfuehrungszeichen"

    In die rc.local kann ich aber wie weiter oben im Thread beschrieben einfach "/home/pi/bin/script_auto_run &" schreiben.

    War das verständlich oder zu kompliziert von mir geschrieben?


  • Für mich nicht klar genug :shy:
    Wichig ist dass das export=$:<path> am Anfang des Scripts steht.

    Ok nochmal in kurz:

    ich meinem Skript steht nicht nur der Pfad zur ausführbaren Datei sondern auch noch 2 weitere Pfade, mit denen ich Hardwaremodule starte.

    Ich glaube, das deshalb dein Code bei mir nicht funktioniert, da er nicht weis welchen Pfad er mir plotten soll.

    Kann das sein?

    edit: nein, nach dem löschen der anderen pfade habe ich nach eingabe deines Codes trotzdem nichts zurückbekommen...

    Einmal editiert, zuletzt von Dillinger (15. August 2015 um 20:43)


  • Zeige doch mal den momentanen Inhalt Deines Scripts.


    bitteschön

    Ich weis das export hier nicht am Anfang steht, aber der Pfad stimmt ja eh noch nicht, da ich noch keine Antwort nach Eingabe deines Codes bekommen habe.

    Einmal editiert, zuletzt von Dillinger (15. August 2015 um 22:30)

  • Hi,
    wenn erst das Programm und dann der CAN Bus gestartet werden muss, dann ändere einfach das script:

    Bash
    #!/bin/bash
    # Skript um gewuenschte Applikationen und Befehle automatisch zu starten
    echo "Autostart Skript starten..."
    /home/pi/Prog/test/bin/Debug/test &
    #CAN-Boards starten
    /sbin/ip link set can0 up type can bitrate 500000
    /sbin/ip link set can1 up type can bitrate 500000

    wenn das Programm nach dem CAN Bus gestartet werden muss, dann eben:

    Bash
    #!/bin/bash
    # Skript um gewuenschte Applikationen und Befehle automatisch zu starten
    echo "Autostart Skript starten..."
    #CAN-Boards starten
    /sbin/ip link set can0 up type can bitrate 500000
    /sbin/ip link set can1 up type can bitrate 500000
    #
    /home/pi/Prog/test/bin/Debug/test &

    cu,
    -ds-

  • Oha ... das sieht aber nicht so aus wie ich es beschrieben habe :s

    Irgendwie haben wir ein Kommunikationsproblem :)

    Lösche doch mal die export Zeile aus dem Script und rufe das folgende Script auf und gib als Parameter den absoluten Namen Deines Scripts mit.

  • :lol: ... Danke für die Blumen

    Du weisst doch - entweder erklärt man jemandem was er tun soll - oder wenn es Kommunikationsprobleme gibt - macht man es selbst. Da bietet sich dann eben bei Linux ein kleines Script an welches man schreibt und den Empfänger ausführen lässt :D

    Jetzt warten wir aber erst mal ab ob das Script auch im vorliegenden Falle funktioniert.

Jetzt mitmachen!

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