Reiner: Linux-/Posixfrage

Hallo zusammen,

ich habe eine u.U. dumme Frage?! ;-)

Wenn man auf der Konsole einen Befehl in den Hintergrund schickt:

z.B.:

"tail -f /var/log/messages &"

so kann man diesen wieder hervorkramen, indem man zunächst die jobid sucht:

"jobs -l"
(sagen wir, die Ausgabe wäre "1")

und dann diese Jobid mittels:

"fg %1"

nach vorne holt, als hätte man den ersten Befehl ohne "&" abgesetzt.

Soweit - so gut! :-)

-------------------------------------------

Gibt es irgendeine Möglichkeit, dies auch mit von einem Cronjob angetriggerten Befehl zu machen?

Vielen Dank für jeden Hinweis.

lg
Reiner

  1. Die jobid wird von der Konsole vergeben (bash-Intern) - ebenso wie fg ein bash-builtin ist und kein externer Befehl. Da cronjobs von cron und nicht von bash gespawnt werden, gibt es auch keine bash-interne Job-ID.

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
    1. Die jobid wird von der Konsole vergeben (bash-Intern) - ebenso wie fg ein bash-builtin ist und kein externer Befehl. Da cronjobs von cron und nicht von bash gespawnt werden, gibt es auch keine bash-interne Job-ID.

      Ja, ok! Ich wollte damit nur ungefähr andeuten, was ich erreichen möchte.
      Danke f. die Antwort.

      D.h. ich möchte entweder Zugriff auf ein vom Crond gestartetes Programm bekommen oder aber, das würde wohl auch reichen, die Ausgaben, die stdout ja quasi ins Nirvana schickt, weil keine Konsole, sichten können.

      lg
      Reiner

      1. Hallo,

        D.h. ich möchte entweder Zugriff auf ein vom Crond gestartetes Programm bekommen oder aber, das würde wohl auch reichen, die Ausgaben, die stdout ja quasi ins Nirvana schickt, weil keine Konsole, sichten können.

        1. stdout mittels > umleiten in eine Datei
        2. cron verschickt per default die Ausgabe von Cronjobs per Mail, die
             Mailadresse ist zumeist user@hostname, man kann aber auch bei den meisten
             Cron-Implementierungen in die Crontab eine Zeile einfuegen der Form

        MAIL=wohin@die.mail.soll

        Hinweis: Die Ausgabe eines Jobs wird nur dann per Mail verschickt, sobald
           der Job beendet ist (auf welche Weise auch immer)

        Viele Gruesse,
        Christian

        1. Hallo,

          D.h. ich möchte entweder Zugriff auf ein vom Crond gestartetes Programm bekommen oder aber, das würde wohl auch reichen, die Ausgaben, die stdout ja quasi ins Nirvana schickt, weil keine Konsole, sichten können.

          1. stdout mittels > umleiten in eine Datei
          2. cron verschickt per default die Ausgabe von Cronjobs per Mail, die
               Mailadresse ist zumeist user@hostname, man kann aber auch bei den meisten
               Cron-Implementierungen in die Crontab eine Zeile einfuegen der Form

          MAIL=wohin@die.mail.soll

          Hinweis: Die Ausgabe eines Jobs wird nur dann per Mail verschickt, sobald
             der Job beendet ist (auf welche Weise auch immer)

          Ok, das ist mir bekannt.
          (siehe auch andere Antwort auf Deine)
          Die Frage wäre, ob man das noch nachträglich umbiegen könnte.

          1. Moin!

            Die Frage wäre, ob man das noch nachträglich umbiegen könnte.

            Das will vorbereitet sein. Die man-Pages zu mknod, mkfifo und ein filname=mktemp -u (für den Dateiname) können Dir weiterhelfen.

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix

  2. Hallo Reiner,

    Gibt es irgendeine Möglichkeit, dies auch mit von einem Cronjob angetriggerten Befehl zu machen?

    Nein. Das einzige, was mir evtl. als Loesungsansatz fuer Dein Problem einfiele, waere vom Cronjob aus den Job in einem GNU Screen zu starten, mit dem man sich dann von der Konsole aus verbinden kann. In diese Richtung koenntest Du mal experimentieren.

    Viele Gruesse,
    Christian

    1. Hallo Reiner,

      Gibt es irgendeine Möglichkeit, dies auch mit von einem Cronjob angetriggerten Befehl zu machen?

      Nein. Das einzige, was mir evtl. als Loesungsansatz fuer Dein Problem einfiele, waere vom Cronjob aus den Job in einem GNU Screen zu starten, mit dem man sich dann von der Konsole aus verbinden kann. In diese Richtung koenntest Du mal experimentieren.

      könntest Du das an einem Beispiel erklären?
      So ganz habe ich das nicht verstanden.
      Schön wäre ja, wenn man da irgendwie was Generelles als Werkzeug hätte.

      Wie sieht es denn eigentlich aus, wenn ein Job z.B. so:

      * * * * /bin/sh meinJob.sh > /dev/null 2>&1

      gestartet wurde. Gäbe es eine Chance, anhand der PID die Ausgabe im Nachhinein noch in eine Datei zu lenken?

      Ich kann mir nicht vorstellen, dass sowas nicht schonmal jemand in der Praxis hinterfragt hat.

      Danke!

      1. Hallo,

        Gibt es irgendeine Möglichkeit, dies auch mit von einem Cronjob angetriggerten Befehl zu machen?

        Nein. Das einzige, was mir evtl. als Loesungsansatz fuer Dein Problem einfiele, waere vom Cronjob aus den Job in einem GNU Screen zu starten, mit dem man sich dann von der Konsole aus verbinden kann. In diese Richtung koenntest Du mal experimentieren.

        könntest Du das an einem Beispiel erklären?

        Naja, versucht habe ich das selbst noch nie, aber ich meinte, dass Du Dir vielleicht mal die Software GNU Screen ansehen willst. Die Idee wäre da eine Screen-Sitzung per Cron zu starten wo das Programm drin läuft (wenn das überhaupt geht, wie gesagt: nie probiert) und wenn man dann während des Laufens was machen will verbindet man sich auf der Konsole mit dem entsprechenden Screen. (Dies wird verständlich wenn Du Dir mal die Doku zu Screen angeschaut hast und das mal ausprobiert hast.)

        Wie sieht es denn eigentlich aus, wenn ein Job z.B. so:

        * * * * /bin/sh meinJob.sh > /dev/null 2>&1

        gestartet wurde. Gäbe es eine Chance, anhand der PID die Ausgabe im Nachhinein noch in eine Datei zu lenken?

        Nicht wirklich. An die alte Ausgabe kommt man natürlich gar nicht mehr ran und an die neue Ausgabe auch nicht mehr wirklich. (Man könnte natürlich mit einem Debugger sich an das Programm hängen und versuchen, den Dateideskriptor irgendwie so auszutauschen, aber ob das wirklich so gut funktioniert wage ich zu bezweifeln...)

        Ich kann mir nicht vorstellen, dass sowas nicht schonmal jemand in der Praxis hinterfragt hat.

        Naja, >/dev/null heißt halt "schmeiß weg". Wenn Du's behalten willst, tu die Ausgabe halt in ein temporäres Verzeichnis und räume das in regelmäßigen Abständen mal auf. Das ist die Standardlösung für sowas.

        --------------------------------------------------------------

        Erzähl doch mal bitte etwas konkreter, was für ein Szenario Du hast. Irgendwie kommt's mir so vor, als ob es vielleicht eine bessere Lösung für Dein übergeordnetes Problem gibt und Du Dich hier nur in irgend einer Detailfrage verrennst.

        Viele Grüße,
        Christian

  3. Erstmal danke - da waren, denke ich, ein paar gute Hinweise dabei!
    Ich bin von diesem Forum auch nach Jahren immer noch begeistert!

    Lieben Dank!!!

    Reiner