Screen autostart + autostart ...

  • Hallo Ihr Lieben,
    ich bin bald wieder für längere Zeit weg, mein rPI2 läuft so weit, eine kleine Verbessung würde ich aber gerne noch machen ...

    kurz was er macht ...
    beim starten des rPI2 werden von einer sh verschiedene py-Scripte gestartet, welche externe Tasten überwachen, ein LCD ansteuern, die Funktion einer externen HDD steuern (un-/ mounten, ein- / ausschalten, etc.) und zum Schluss wird ein Script gestartet, welches dauerhaft auf der Konsole angezeigt wird (ein Download-Script).

    Ich habe die Möglichkeit mit per SSH einzuloggen, um Änderungen/Korrekturen durchzuführen, oder aber herrunter geladene Dateien zu löschen, etc..

    Jetzt habe ich "screen" für mich entdeckt" ...

    Besteht die Möglichkeit den Startprozess so umzubauen, dass vor dem Download-Script ein "screen" eröffnet wird und das Download-Script in diesem geöffnet wird?

    Wenn ich per SSH auf den rPI2 drauf gehe könnte ich dann nämlich diesen "screen" reconnecten, um in die Bildschirmmeldungen des Download-Scripts rein zu schauen.

    Leider blieb meine Suche ergebnislos ... wichtig ist auch, dass das Download-Script nicht einfach erneut ausgeführt wird, wenn ich einen neuen "screen" auf mache (warum auch immer).

    THNX, LG Ralf aka synth

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

  • Verirrende Beschreibung :fies:

    Wie startest du "screen" denn bisher?

    Machs einfach mal so:

    Code
    screen -dmS downloader /path/to/script.sh

    "downloader" ist der Session-Name
    Oder

    Code
    screen -dmS downloader /bin/bash /path/to/script.sh

    Ich finde aber tmux besser :fies:

    Code
    tmux new-session -s downloader -d
    tmux send -t downloader "/path/to/script.sh"
    tmux send -t downloader ENTER

    Wenn man dann die Session ohne zu attachen steuern möchte macht man:

    Code
    tmux select-window -t "downloader"
    # send CTRL+C key and "exit" to the current prog...
    tmux send-keys C-c;
    tmux send-keys \"exit\"
    tmux send-keys Enter

    ..gut, das ist ein bisschen umständlicher als mit screen, aber die Möglichkeiten sind umfassender bzw eigentlich auch durch "send-keys" einfacher.

    Bei 'screen' sähe das so aus bzw da weiß ich grad selbst nicht wie man CTRL+C senden kann daher ein anderes Beispiel...:

    Code
    screen -S downloader -X stuff $'ls -l\n' #konsolen Befehl
    
    
    screen -S downloader -X quit #screen Befehl

    ...usw...


    Und zu der tmux Session attached man dann so:

    Code
    tmux attach -t "downloader"
  • Ich habe Screen bisher gar nicht gestartet ...

    Wenn ich es von Hand so aufrufe funktioniert es, wenn ich es automatisch in meiner "start.sh" aufrufe funktioniert es nicht. :(

    ich glaube da die Kiste jetzt zuverlässig läuft sollte ich aber auch nicht mehr fummeln ... werde also nix mehr machen ... nur noch heute und morgen Sachen packen + aufräumen + Kleinkram und ich bin weg ... die Baustelle nehme ich mir für das nächste Mal vor, sollte ich
    den rPI dann überhaupt noch als Downloader nutzen.

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

  • die downloader.sh startet nur ein pythonscript mit python2 /home/pi/HiScri/dl.py

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

    Einmal editiert, zuletzt von synth (21. Mai 2016 um 10:47)

  • Das hängt in der /etc/rc.local (sorry, wollte ich noch schreiben, habs vergessen)
    Dort wird einfach nur /home/pi/start.sh ausgeführt, was auch geschieht.

    Wenn ich mich per SSH anmelde suche ich über "screen -list" nach den existierenden Sessions

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

  • Genau da liegt der Hund begraben :fies:

    /etc/rc.local wird als root ausgeführt - alle sudo's sind in deinem start.sh Script also überflüssig. Aber das wichtigste ist das "screen" ebenfalls als root gestartet wird und somit gehört die Session dem Benutzer root, nicht dem Benutzer pi welcher aber nicht einfach auf die Sessions anderer Benutzer zugreifen darf - das wär ein massives Sicherheitsrisiko.

    "screen -list" ist aber auch nicht zum attachen :fies:

  • Okay, ... dann schau ich mir das nachher nochmal in ner ruhigen Minute an ...
    die sudos sind zwar überflüssig ... sind aber noch aus der Zeit des manuellen Testens drin ... manchmal muss ich die sh auch manuell ausführen ... da ist es dann sinnvoll. ;)

    das mit dem rs.local ... ich wusste ich hab was vergessen ... erklärt das natürlich eindeutig.

    screen -list ... wie beschrieben, schaue nach sessions ... da ich keine gefunden habe, kann ich auch nicht attachen ;)

    Muss erstmal weiter packen ... melde mich bevor ich abhaue nochmal oder von unterwegs. :)

    Danke Dir meigrafd!

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig


  • die sudos sind zwar überflüssig ... sind aber noch aus der Zeit des manuellen Testens drin ... manchmal muss ich die sh auch manuell ausführen ... da ist es dann sinnvoll. ;)

    Nein auch dann nicht :fies: Wenn du das Script über sudo ausführst werden auch alle darin befindlichen Befehle als root ausgeführt. Mach dann also einfach " sudo /home/pi/start.sh " wenn du manuell testen willst :D

  • Ok, so weit so gut ... läuft ... nur ein Problem hab ich noch ...
    ich starte weiterhin meinen Screen und das Script in der start.sh ...

    Code
    sudo su pi -c screen -dmS loader /home/pi/downloader.sh

    in der .bashrc vom user pi mache ich beim Starten ausserdem ein "screen -r", damit die Konsole zum Screen attached ist.

    Wenn ich mich jetzt einlogge via SSH kann ich den Screen von der Konsole detachen und zu meiner SSH-Session attachen ...
    wie bekomme ich ihn aber (nach dem detach via SSH) wieder automatisch attached an die Konsole?

    Hintergrund, am Pi hängt zwar kein Monitor und nix, aber im Fall aller Fälle soll jemand bei mir zu Hause wenigstens einen Monitor
    ran hängen können, um zu schauen was los ist.

    Crontab (dache ich so, einfach alle 15 Minuten, wie oben mit sudo su pi ....) funzt nicht, ein kleines Script, welches ich automatisch über .bashrc anstatt dem "screen -r" ausführe, welches im Hintergrund läuft und nach SSH-Logout das "screen -r" ausführt funktioniert auch nicht, weil das Script nicht auf der Konsole (sondern halt im Hintergrund) ausgeführt wird.

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

  • Oha, "sudo su pi" ? Was ist das für eine komische Kombination :-/

    Entweder

    Code
    sudo -u pi screen -dmS loader /home/pi/downloader.sh


    Oder

    Code
    su -l pi -c "screen -dmS loader /home/pi/downloader.sh"

    Da du das in /etc/rc.local einträgst empfehle ich letzteres. Warum? Siehe man su und guck die Beschreibung zu --login

    Anstatt /etc/rc.local kannst du aber auch @reboot in der Benutzercrontab von pi verwenden und verzichtest dann auf sudo oder su

  • sorry, korrektur
    "su pi -c screen ...." kommt davon, wenn man aus dem Kopf schreibt ... sudo braucht ich ja in der rc.local nicht. :)

    dennoch bleibt die Frage, wie ich automatisch mit der Konsole am pi den Screen wieder attache ... hab jetzt wie ein blöder gesucht ... aber keine Idee ...

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

  • Wie gesagt, lies dir bitte die manualPage zum Befehl su durch: man su
    Und lese dann was dort bezüglich " --login " steht.

    Desweiteren ist bei "su" wichtig den Command in " zu setzen damit es als ein Argument/Parameter gewertet wird. Das ist bei sudo unwichtig bei su aber nicht.

    Und zu der fehlenden Idee: Sobald du den screen richtig startest war deine Idee aus Beitrag#12 in Ordnung. Es scheiterte bisher wie bereits bemerkt an der fehlerhaften Ausführung des "screen -dmS ..."

  • Sorry, kam beim ersten Mal nicht an ...
    ... funzt dennoch weder via Crontab, noch via Script die "automatische Rückholung".

    Fotograf, jetzt im Bereich Administration bei AIDA-Cruises tätig

    Einmal editiert, zuletzt von synth (21. Mai 2016 um 15:49)

Jetzt mitmachen!

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