• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Dateien kopieren mit netcat, tar und crontab funkt. nicht

Hallo,

ich habe ein seltsames Problem.
Ich möchte 5 Dateien von einem Rechner zu einem anderen Rechner uebertragen.
Dazu benutze 2 Skripte die netcat und tar benutzen.

Auf dem Rechner der Senden soll, sieht das Skript folgendermaßen aus:
#!/bin/sh
# Skriptname: /root/bin/copy_sender.sh
cd /
/bin/tar -cv /var/log/save/* --exclude=log_save* | /usr/bin/netcat 192.168.20.1 2265


Auf dem Rechner der Empfangen soll, sieht das Skript folgendermaßen aus:
#!/bin/sh
# Skriptname: /root/bin/copy_empfaenger.sh
cd /
/usr/bin/netcat -l -p 2265 -w 420 | /bin/tar xv


Wenn ich das Skript auf dem Empfaenger-Rechner manuell starte (also /root/bin/copy_empfaenger.sh) und anschließend das Skript auf dem Sender-Rechner manuell starte (also /root/bin/copy_sender.sh), dann werden die Datei, die sich unter /var/log/save befinden auf den Empfaenger-Rechner uebertragen. Also genau so wie es sein soll.

Jetzt wollte ich das Skript auf der Empfaenger-Seite ueber crontab zu einer bestimmten Zeit starten. Das Skript startet auch und wartet auf port 2265 auf Daten. (habe ich mit fuser -n tcp 2265 ueberprueft). Wenn ich jetzt das Skript auf der Sender-Seite starte, werden nur 3 Dateien uebertragen. Wobei die dritte Datei auch nicht komplett uebertragen wurde. (Die Dateien sollten jeweils eine Größe von ca. 1MB haben)
Aus irgendeinen Grund bricht netcat, tar oder sonstwas ab. Keine Ahnung warum.
Dieser Effekt taucht aber nur dann auf, wenn ich das Empfaenger-Skript ueber crontab starten lasse. Der crontab-Eintrag auf der Empfaenger-Seite sieht folgendermaßen aus:

30 13 * * * /bin/sh /root/bin/copy_empfaenger.sh

System: Suse 9.2

Ich weiß nicht weiter.
Kann jemand mir einen Tip geben, woran das liegen könnte.

mfg und einne schönen Tag
Thomas
 
A

Anonymous

Gast
Ich würde mal versuchen auf der Empfängerseite -w 420 wegzulassen, beendet sich allerdings netcat nicht mehr wenn der Sender mal ausfällt , aber ansonsten sehe ich keine Probleme in den Scripten, nur warum
30 13 * * * /bin/sh /root/bin/copy_empfaenger.sh
wenn du die Ausführungsrechte auf dem Script gesetzt hast, dann /bin/sh weglassen.

Ist aber trotzdem eine windige Angelegenheit, sowas mittels cron über 2 Rechner steuern zu wollen.
Das klassische währe so was hier von der Senderseite aus mit cron starten.
Code:
$ tar cf - MYDIR/ | ssh gate 'cd /DIR && tar xpvf -'
und für ssh-Zugriff auf Server mittels Public key authentication ein Anmelden ohne Passwort zu konfigurieren.

robi
 
OP
L

Linux_Thomas

Newbie
Hallo robi,

danke, für deine Antwort.
Leider funktioniert es auch nicht, wenn ich die Option w 420 weglasse.
Der "Kopiervorgang" bricht mitten drin ab.
so'n mißt.

ssh wollte ich eigentlich nicht verwenden.

mfg und einen schönen Tag noch
Thomas
 
A

Anonymous

Gast
Also was ich letztens erst ausprobiert habe ist folgenes,
das hat auch mit großen Datenmengen prima funktioniert.
Quelle: http://www.jfranken.de/homepages/johannes.de.html
Achtung: bei Suse gibt es den Befehlsnamen nc nicht. entweder in netcat umwandeln oder einen link anlegen.

Mit Hilfe von von netcat, (gnu)tar und bash kann ich Verzeichnisbäume von einem Host auf einen anderen kopieren. Die Dateien werden komprimiert und inkl. ihrer Attribute (Zugriffsrechte/Änderungsdatum) übertragen.
Hierzu lasse ich auf dem empfangenden Host einen netcat auf Port 51330 lauschen und leite seine Ausgabe in ein tar um:

$ alias receive='nc -vlp 51330 | tar xzvp'
$ receive
listening on [any] 51330 ...

Auf der sendenden Seite rufe ich eine Shellfunktion auf, welche die übergebenen Dateien/Verzeichnisse zusammentart und an den Port 51330 des empfangenden Rechners sendet:
$ send() { j=$*; tar cpz ${j/%${!#}/}|nc -w 1 ${!#} 51330; }
$ send dir* tp.jfranken.de

Zur Bash-o-magic:
${!#} gibt den letzten Parameter (den Hostnamen) zurück,
${j/%${!#}/} die übrigen (Liste der Dateien oder Verzeichnisse).


robi
 
Oben