Anwendung über SSH in den Hintergrund ?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich habe ein kleines Programm gemacht, mit dem ich meine Stromzähler auslese und logge.

    Nun habe ich aber das Problem, dass ich diese kleine Anwendung im Hintergrund weiterlaufen lassen möchte.
    Also, ich starte die Anwendung z.B. mit ./MeineAnwendung über ein Terminal (ssh). Dann läuft die Anwendung nur, solange auch das Terminal aktiv ist.

    Kann ich die Anwendung irgendwie in den Hintergrund schicken, damit die auch weiterläuft wenn das Terminal geschlossen wird ?
    Eventuell auch im Programm irgendwie, dass wenn es gestartet wird, sich abspaltet und als Hintergrundprozess weiterläuft ?

    Ich habe das schon mal gesehe, muss irgendwie gehen... nur wie ?

    Würde mich freuen, wenn jemand einen Tip hat und mir helfen kann ...

    LG,
    Alex

  • Hallo Alex,

    wenn du dein Shell-Skript im Hintergrund ausführen willst reicht ein & am Ende.

    Code
    ./yourscript.sh &

    Damit das Skript auch weiterläuft wenn du die aktuelle Session beendest, hast du zwei Möglichkeiten. Du kannst das Skript über nohup aufrufen.

    Code
    nohup ./yourscript.sh &

    Oder du erstellt eine neue Session mit screen welche im Hintergrund weiterläuft ...

    Code
    screen

    ... und startest darin dein Skript.

    Code
    ./yourscript.sh

    Die Screen-Session kannst du dann mit Ctrl+A D verlassen. Wenn du die Session wieder aufrufen willst frägst du mit dem folgenden Befehl die Session-ID ab bzw. wenn nur eine Session existiert kannst du dich dadurch gleich mit dieser Verbinden.

    Code
    screen -x

    Existieren mehrere Sessions kannst du dich über die Session-ID verbinden.

    Code
    screen -r 5180

    Die Screen-Session kann man über Ctrl+D beenden.

    Screen ist bei Raspbian aber noch nicht installiert. Das kannst du wie folgt nachholen.

    Code
    sudo apt-get update
    sudo apt-get install screen

    Gruß Georg

  • Du kannst Screen benutzen:
    Mit 'screen -S merker PROGRAMMNAME' starten und mit '<strg>-A D' in den Hintergrund schickenl.
    'merker' ist nur ein Name für die Hintergrundsession den Du beliebig wählen kannst.
    Beim nächsten Einloggen kannst Du mit 'screen -r merker' die Session wieder aufrufen.

    oder Du benutzt 'nohub':
    Einfach das Programm mit 'nohub PROGRAMMNAME' starten. Es läuft dann weiter bis der Rechner runtergefahren wird.

    wenn Du öfter machst lohnt es sich das Programm in die /etc/rc.local einzutragen. Dann startet es immer mit dem PI.

  • Hallo,

    vielen Dank für die schnelle Hilfe !

    Ich habe es gerade mal mit 'nohup' ausprobiert.
    Wenn ich nun ps all eingebe, sehe ich in der Prozessliste auch meine Anwendung.

    Mache ich das Terminalfenster aber zu und ein neues Fenster auf und rufe ps all auf, dann sehe ich meine Anwendung nicht mehr.
    Ist das so korrekt oder hat sich die Anwendung doch beendet mit Schließen des Terminalfensters ?

    Gruß,
    Alex

  • Hallo,

    habe ein ähnliches Problem:

    Ich würde gerne ein C Programm via SSH starten, welches dann beim schließen der SSH Sitzung im Hintergrund weiterlaufen soll.
    Wenn ich es mit nohup ./programm aufrufen will, bekomme ich immer folgende Meldung:

    nohup: ignoriere Eingabe und hänge Ausgabe an "nohup.out" an

    Damit das Programm aber richtig läuft, braucht es von mir noch ein paar Eingaben...

    Kann mit hier wer weiterhelfen??

  • So, da nun meine Programme im Hintergrund verschwunden sind, aber immer noch laufen, stellt sich natürlich die Frage, wie ich die Programme wieder stoppen kann :D

    Habs mal intuitiv mit "fg" probiert, aber bekomme die Meldung "kein solcher Job".

    Bin mir sicher, ihr wisst da natürlich auch den passenden Befehl dazu ;)

    greetz,
    Wostl

  • Ja der Wostl ... ;) ...

    hmm ... wir orb schon schrub: mit ps nach der pid suchen und killen

    Du kannst auch Dir auch - bevor Du Dich ausloggst - mit jobs die pids anzeigen bzw. in eine Datei umleiten lassen.

    Du könntest auch - falls die Programme Deine sind - die pid aus den Programmen in eine Datei schreiben.

    Mit fg lagst Du schon richtig ;) ...
    Aber das funktioniert nur, wenn Du Dich zwischenzeitlich nicht abgemeldet hast.

    cu,
    -ds-

  • Immer wieder dieser Wostl ;)

    wie früher im Verlauf schon mal geschrieben wärs folgende Kombination gewesen:

    Code
    ps ax

    und dann


    Code
    kill <pid>

    Wer lesen kann ist halt ganz klar im Vorteil...

    Einmal editiert, zuletzt von Wostl (25. Juni 2013 um 17:10)

Jetzt mitmachen!

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