shell bash

L I V E Stammtisch ab 20:30 Uhr im Chat
  • guten tag liebes comunity,

    ich habe hier ein kleines problem mit einem shell script.

    mit dem script 02.sh kann ich das relai für 5 minuten schalten.

    soweit kein problem

    #!/bin/sh

    gpio export 6 out

    sleep 300

    gpio export 6 in

    nun stört es mich aber extrem das wenn ich in der konsole arbeite bzw.

    dieses script per ssh app ausführe 5 minuten warten muss bis diese script erledigt ist.

    möchte gleich wieder in die nächste zeile kommen, bzw. dem script nur mitteilen ausführen und mich in ruhe lassen.

    hoffe ich konnte dies einiger massen erklären und ihr wisst was ich meine.

    besten dank und hoffentlich hat wer eine einfache lösung.

  • ist schön das es doch verständlich rüber gekommen ist.

    jetzt ist nur die frage muss ich den text den du eingefügt hast unten bei meinem befehl so wie er ist eins zu eins einsetzen und dann gehts?

  • habe nun die zeile unten eingefügt

    01.sh & disown -h

    das relai schaltet ein jedoch bleibt die zeile unter ssh noch immer für 300 sekunden im wartemodus.

    kann man nicht die sleep 300 irgendwie ausklammern das dies im hintergrund einfach laufen soll

    jetzt habe ich es durchlaufen lassen und folgender fehler wurde ausgegeben aber erst nach den 5 minuten

    ./01.sh: 5: ./01.sh disown: not found

  • Ich glaube du hast Hofei falsch verstanden. Du sollst dein Script mit "01.sh & disown -h" aufrufen, und nicht die Zeile in das Script einfügen.

  • nun stört es mich aber extrem das wenn ich in der konsole arbeite bzw. dieses script per ssh app ausführe 5 minuten warten muss bis diese script erledigt ist.

    Von vorherein als Hintergrund-Prozess starten.
    script_02.sh &

    BTW, Du solltest unbedingt die Leerzeichen im Scriptnamen entfernen.... das führt über kurz oder lang zu Problemen, weil irgendwann bei anderer Verarbeitung Teile des Names nicht als Name sondern möglicherweise als Parameter interpretiert werden.

  • 02.sh &

    sollte ausreichen, um das Script im Hintergrund zu starten.
    Die Shell gibt daraufhin eine Jobnummer (z.B. 1) samt PID zurück.

    Da bei Beendigung der Terminal-Shell, oder Remote(SSH)Shell auch alle Jobs (Unterprozesse), auch im Hintergrund, beendet werden, gibt es mehrere Strategien, einen im Hintergrund gestarteten Prozess weiterlaufen zu lassen.

    Eine Möglichkeit ist mit

    disown -h 1 den Job Nr.1 selbständig weiterlaufen zu lassen, doch ist disown nicht bei den kleineren Distributionen mitinstalliert.

    Eine andere Möglichkeit ist gleich mit

    nohup 02.sh & den Job gegen das hangup Signal imun zu machen, sodass der Subprozess auf SIGHUP (Hangup detected on controlling terminal) nicht reagiert.

    Mit < fg 1 > kann der Job Nr.1 wieder in den foreground geholt werden.

    Weiteres zur Shell < man sh > < man bash >, oder ein www Shell Grundkurs.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • 02.sh &

    sollte ausreichen, um das Script im Hintergrund zu starten.

    *uuups*... :saint:... den Namen habe ich ja völlig falsch verstanden... *lol*

  • >>(Zitat RTFM:(

    02.sh &

    sollte ausreichen, um das Script im Hintergrund zu starten.


    Grundsätzlich ja, klar. Der Grund warum ich disown mit dazugenommen habe ist, was passiert mit dem Skript wenn das Terminal innerhalb der 5 Minuten beendet wird?

    Reine Vermutung von mir: Skript wird „abgeschossen“ und ohne vernünftige Fehlerbehandlung bleibt das Relais auch nach den 5 Minuten angezogen.

    disown ist sowohl bei Raspbian als auch Raspbian lite standardmäßig verfügbar.

    Alle Eventualitäten von unterschiedlichen Distibutionen lassen sich wohl schwer berücksichtigen.

  • OT

    Ich konnte nicht wiederstehen... die Ähnlichkeit ist frappierend... als wärs ein Foto von mir.... und dann die Zeichensprache mit der Hand... besser konnt ichs nicht ausdrücken... :evil: :lol:

  • was passiert mit dem Skript wenn das Terminal innerhalb der 5 Minuten beendet wird?

    Reine Vermutung von mir: Skript wird „abgeschossen“ u

    Bevor ich das geschrieben habe, habe ich das mit einem einfachen sleep 60 & getestet. Bei mir ist das auch nach Terminal-Ende durchgelaufen. In nem zweiten Terminal hab ichs mit htop beobachtet. Gab kein Problem.

    Nachtrag:

    So ein Scheiss... wollte es jetzt noch mal bestätigen und es fliegt raus... was ist denn da jetzt anders gelaufen.... :wallbash:

    Noch'n Nachtrag:

    Bei Eingabe von exit läufts weiter. Bei Click auf das Frame-Close-Icon (das "X") wird der Prozess gekillt. Das ist ja verrückt.

  • was passiert mit dem Skript wenn das Terminal innerhalb der 5 Minuten beendet wird?

    Reine Vermutung von mir: Skript wird „abgeschossen“ und ohne vernünftige Fehlerbehandlung bleibt das Relais auch nach den 5 Minuten angezogen.

    disown ist sowohl bei Raspbian als auch Raspbian lite standardmäßig verfügbar.

    Verwendet der TO Raspbian (lite) wenn er "Command not found" angezeigt bekommt ?

    Wenn das Terminal seine (serielle) Verbindung verliert, wird an alle in der Shell noch laufenden Prozesse ein hangup-Signal (SIGHUP - 1) gesendet. Im Gegensatz zu SIGKILL - 9, lässt sich SIGHUP abfangen. Entweder ist ein Programm so programmiert/kompiliert, dass es auf SIGHUP gar nicht reagiert, oder es wird im Nachhinein die Weiterleitung von SIGHUP unterbunden.

    disown kann mehr als nohup, ist aber in der sh nicht eingebaut, nur in der bash, ksh, zsh.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Nachtrag:


    So ein Scheiss... wollte es jetzt noch mal bestätigen und es fliegt raus... was ist denn da jetzt anders gelaufen.... :wallbash:


    Noch'n Nachtrag:

    Bei Eingabe von exit läufts weiter. Bei Click auf das Frame-Close-Icon (das "X") wird der Prozess gekillt. Das ist ja verrückt.

    Verwirr mir nich xD - Ok ich schließe immer mit dem "X"...Deshalb wohl auch das Verhalten so schon verinnerlicht.


    Verwendet der TO Raspbian (lite) wenn er "Command not found" angezeigt bekommt ?

    Punkt für dich - ich sag trotzdem ja, gehe davon aus wie es Josef78 auch schon angesprochen hat das der TE das am Ende des Skriptes hinzugefügt hat, aber warten wir mal ab was der TE dazu sagt.

  • Ich glaube du hast Hofei falsch verstanden. Du sollst dein Script mit "01.sh & disown -h" aufrufen, und nicht die Zeile in das Script einfügen.

    das ist es... jetzt klappt es wunderbar... einfach genial danke an alle!!!

Jetzt mitmachen!

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