netcat im Cron

Hinweis: In dem Thema netcat im Cron gibt es 9 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo zusammen,


    wir möchten einen Netzwerkstream über netcat auslesen und das Ergebnis in eine Datei wegschreiben.
    Das ganze soll dann nach einem Bestimmten Zeitraum beendet werden.


    Starten wir das Programm manuell dann ist das kein Problem allerdings wenn wir das in einem Programm im Cron starten bleibt die Datei leer.


    hier der Cron-Eintrag


    00 5 * * 1-6 /abaserp/abas/s3/scanner.sh



    hier der Code der im Programm steht:


    #!/bin/bash


    rm -f /abaserp/abas/erp/applizier/NVEMERK


    mv /abaserp/abas/erp/applizier/SCANNER.LOG /abaserp/abas/erp/applizier/archiv/SCANNER.$(date "+%y%m%d%H%M").log


    /usr/bin/netcat -n XX.X.X.XXX 2112 > /abaserp/abas/erp/applizier/SCANNER.ERR > /abaserp/abas/erp/applizier/SCANNER.LOG


    pid=$!
    sleep 43200
    for i in `ps -ef| awk '$3 == '$pid' { print $2 }'`
    do
    kill $i
    done




    Hat da jemand eine Idee ? ?(

    Für den Inhalt des Beitrages 94935 haftet ausdrücklich der jeweilige Autor: kairoenne

  • Danke , das habe ich eben geändert.


    Allerdings spricht dagegen, dass der rm und mv Befehl ausgeführt werden.
    das netcat startet auch , weil eine neue Datei erzeugt wird.
    Aber es werden aus dem Stream keine Daten in die Datei geschrieben. ( im Gegensatz zum manuellen start des Scripts )

    Für den Inhalt des Beitrages 94939 haftet ausdrücklich der jeweilige Autor: kairoenne

  • Doppelpunkt vergessen?


    Zitat

    XX.X.X.XXX 2112

    Für den Inhalt des Beitrages 94940 haftet ausdrücklich der jeweilige Autor: Sauerland


  • Text gelöscht, war falsch formatiert und nicht lesbar.
    Bitte neu schreiben

    Für den Inhalt des Beitrages 94950 haftet ausdrücklich der jeweilige Autor: Easy

  • Aber es werden aus dem Stream keine Daten in die Datei geschrieben. ( im Gegensatz zum manuellen start des Scripts )

    So, dann rate ich mal ins Blaue.
    Der Befehl netcat wird bei cron unter einen anderen User ausgeführt als beim manuellen Start. Und der Cron-user ist nicht berechtigt, den Datenstrom zu benutzen.

  • Code
    /usr/bin/netcat -n  XX.X.X.XXX 2112 > /abaserp/abas/erp/applizier/SCANNER.ERR > /abaserp/abas/erp/applizier/SCANNER.LOG

    Es wird die Standardausgabe ZWEIMAL umgeleitet.
    Der Code funktioniert.
    Aber nicht so, wie du es meintest.


    du willst diese Umleitung:
    2>/abaserp/abas/erp/applizier/SCANNER.ERR > /abaserp/abas/erp/applizier/SCANNER.LOG


    Dein Code schreibt sehr wohl. Aber halt nur in die .ERR.


    Und es gibt den Befehl pidof oder man lässt sich mit eiem ps- Format (-output ) gleich die pid mit ausgeben; ps -rf -o pid . "pid" ist nur ein vorgegebener Formatbezeichner. Es gibt sehr viel mehr. Die wichtigsten: -o pid,user,cmd würde in der ersten Spalte die Pid, in der zweiten den User und in der dritten das Commando ausgeben.



    @boser Es gibt in keinem Linux extra Rechte für Streams. Entweder der User darf, oder er darf nicht. Und ein 00 in crontabs ist sehr wohl zulässig. Es ist besser erst die Manpages zu lesen, denn wilde Theorien zu verbreiten. Lese man 5 crontab

  • Hallo zusammen,


    also der job läuft im root cron ( wird auch als root manuell gestartet )


    ich habe jetzt mal das Script geändert , dass er nur in eine Datei schreibt.


    /usr/bin/netcat -n XX.X.X.XXX 2112 > /abaserp/abas/erp/applizier/SCANNER.LOG


    aber auch da kommt nichts an. Es ist wie verhext.

    Für den Inhalt des Beitrages 95037 haftet ausdrücklich der jeweilige Autor: kairoenne

  • Es ist besser erst die Manpages zu lesen, denn wilde Theorien zu verbreiten. Lese man 5 crontab

    Es ist besser, erst die Forenregeln zu lesen als User zu beleidigen. Jeder will nur helfen, auch wenn er mal falsch liegt. Das geht auch in einem anderen Ton! Lese Forenregeln Punkt 2

  • Alero: Und bitte was ist an diesem Satz beleidigend? Wie muss hier denn die Aussage formuliert sein, damit sie akzeptiert wird? Bitte um ein Beispiel. Einsehbar ist das für mich nämlich nicht.



    zum Thema; Du solltest schon beide Ausgabekanäle umleiten. Schließlich hat ein solcher Prozess weder STDOUT noch STDERR.
    Was soll cron denn mit STDERR machen? Das wäre zuerst zu probieren.


    Es kann aber noch mehr Gründe geben.
    netcat gibt es in zwei Geschmacksrichtungen, und beide sind sehr empfindlich. Manchmal sind mehrere netcats verfügbar.
    Ein

    Code
    update-alternatives --display netcat
    update-alternatives --list netcat


    mag da mehr wissen.


    Ich würde als erstes gucken, ob es ohne Umleitung funktioniert.
    Dazu muss der Prozess ein Terminal haben. Das geht via screen. Starte dazu via cron den Multiplexer mit diesem Kommando:

    Code
    /usr/bin/screen -dmS EinSessionName -c /Pfad/zu/config/.screenrc

    Und in der /Pfad/zu/config/.screenrc steht dann der netcat Aufruf, wie folgt:

    Code
    screen -t MeinNetcat 0 netcat <IP> <Port>


    (-t MeinNetcat kann weggelassen werden; setzt nur den Fenster-titel. die Null bezeichnet das Screenwindow, hier also das erste Screen "Fenster")


    Wenn es da dann klappt, dann füge dem Befehl in .screenrc die Umleitungen hinzu.
    (Hier bräuchtest du nicht beide Umleitungen. STDERR würde ja in screen landen.)


    Berichte, was du da rausfindest.