Page 1 of 1

batch-Datei in Linux

Posted: 2003-05-05 20:18
by trinita
Hallo !

Ich versuche auf meinem Server eine batch-Datei zum Laufen zu bekommen, was nicht gelingt, obwohl ich die Befehle einzeln hintereinander am prompt ausführen kann.

Konkret versuche ich folgendes:
Ich habe eine batch-Datei backup.sh erstellt und die Ausführrechte gesetzt. Inhalt der Datei ist folgender:

wget -r --tries=45 ftp://username:pw@www.meinServerNr2.de/*
zip -r zipdatei ./www.meinServerNr2.de/
rm -r ./www.meinServerNr2.de/
.
.
.

(Sinn und Zweck ist, daß die Daten von einem Server auf den anderen überspielt werden und dort gezippt werden)

Wenn ich die o.a.-Befehle einzeln am prompt eingebe, funktioniert alles. Wenn ich die Batchdatei ausführe, startet der wget-Befehl, überträgt aber nichts. Die Bildschirmausgabe lautet:

"ftp://username:*pw*@www.meinServerNr2.de/*%0D
=> `www.meinServerNr2.de/.listing'
Resolving http://www.meinServerNr2.de... done.
Connecting to http://www.meinServerNr2.de[xyz.xyz.xyz.xyz]:21... connected.
Logging in as username ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> PASV ... done. ==> LIST ... done.

[ <=> ] 5,433 5.18M/s

20:03:19 (5.18 MB/s) - `www.meinServerNr2.de/.listing' saved [5433]

Removed `www.meinServerNr2.de/.listing'.
'. matches on pattern `*

FINISHED --20:03:19--
Downloaded: 0 bytes in 0 files"

Wie gesagt, wenn ich den Befehl aus der Batch-Datei herauskopiere und per Hand eingebe, funktioniert es. Da der Login auch aus der Batch-Datei heraus funktioniert, liegt es auch nicht an username/pw-Problemen.

Bin für jeden Hinweis dankbar,
viele Grüße,
trinita

Re: batch-Datei in Linux

Posted: 2003-05-05 21:01
by captaincrunch
Poste mal bitte das komplette Script (ohne Passwörter natürlich ;) ).

Re: batch-Datei in Linux

Posted: 2003-05-05 21:11
by trinita
Hier ist es :

wget -r --tries=45 ftp://user:pw@www.sehepunkte-redaktion.de/*
zip -r redaktionssystem ./www.sehepunkte-redaktion.de/
rm -r ./www.sehepunkte-redaktion.de/
wget -r --tries=45 ftp://user:pw@ftp.lrz-muenchen.de/webserver/webdata/*
zip -r sfn ./ftp.lrz-muenchen.de/
rm -r ./ftp.lrz-muenchen.de/
zip -r historicum ../../../ -x ../../../ablage/*

Gruß,
trinita

Re: batch-Datei in Linux

Posted: 2003-05-05 21:27
by captaincrunch
Setz mal ein

Code: Select all

#!/bin/bash
in die erste Zeile ...

Btw. : Ab ins Scripting

Re: batch-Datei in Linux

Posted: 2003-05-05 22:10
by trinita
Hallo !

Die Zeile hab ich eingefügt - mit dem Ergebnis, daß ich folgende Fehlermeldung bekomme:

bash: ./backup.sh: No such file or directory

Ich habe folgendes bereits probiert:

1. backup.sh ausführen
2. ./backup.sh ausführen

Die Ausführungsrechte sind nach wie vor gesetzt, die Datei /bin/bash existiert (hab ich nachgesehen).

Was ist falsch ?

Viele Grüße,
trinita

Re: batch-Datei in Linux

Posted: 2003-05-06 09:10
by captaincrunch
Zum einen sieht es fast so aus, als würde das Script noch irgendwo das File "backup.sh" aufrufen.

Erweitere die erste Zeile mal um ein "-x", dann sieht du die "Degubausgabe" der Shell, die dich in dem Fall weiterbringen sollte.

Desweiteren solltest du dir in Shellscripten angewöhnen, mit absoluten Pfaden (also z.B. /usr/bin/wget/) zu arbeiten, da relative Pfadangaben fatale Folgen haben könnten.

Re: batch-Datei in Linux

Posted: 2003-05-06 10:28
by trinita
Irgendwie funktioniert das noch nicht ...

Mein Script sieht nun (bis auf username und pw) exakt so aus:

#!/bin/bash -x
wget -r --tries=45 ftp://user:pw@www.sehepunkte-redaktion.de/*
zip -r redaktionssystem /homepages/21/d65675283/htdocs/ablage/hgrallert/backup/www.sehepunkte-redaktion.de/
rm -r /homepages/21/d65675283/htdocs/ablage/hgrallert/backup/www.sehepunkte-redaktion.de/
wget -r --tries=45 ftp://user:pw@ftp.lrz-muenchen.de/webserver/webdata/*
zip -r sfn /homepages/21/d65675283/htdocs/ablage/hgrallert/backup/ftp.lrz-muenchen.de/
rm -r /homepages/21/d65675283/htdocs/ablage/hgrallert/backup/ftp.lrz-muenchen.de/
zip -r historicum /homepages/21/d65675283/htdocs/ -x /homepages/21/d65675283/htdocs/ablage/*

(backup.sh wird innerhalb des Skripts nicht aufgerufen)

Und als Antwort beim Aufruf bekomme ich:

: unrecognized option
Usage: /bin/bash [GNU long option] [option] ...
/bin/bash [GNU long option] [option] script-file ...
GNU long options:
--debug
--dump-po-strings
--dump-strings
--help
--login
--noediting
--noprofile
--norc
--posix
--rcfile
--restricted
--verbose
--version
--wordexp
Shell options:
-irsD or -c command (invocation only)
-abefhkmnptuvxBCHP or -o option

Habe es auch mal mit --debug ausprobiert, mit dem selben Ergebnis. Lasse ich -x weg, kommt wieder der vorherige Fehler.

Der Aufruf von "bash -x" am prompt funktioniert natürlich ...

Danke für jede Hilfe,
trinita

Re: batch-Datei in Linux

Posted: 2003-05-06 10:43
by dea
Leider hat der Captain nicht gesagt, dass die Sache mit den (absoluten) Pfaden auf die von ihm genannte erste Zeile zurückzuführen ist.

Imho ist die in Deinem Fall nicht unbedingt notwendig, bewirkt sie doch so einige Nebeneffekte ...

Nur mal kurz zur Erklärung, was Du mit dieser ominösen "ersten" Zeile anrichtest:

Normalerweise wird ja in Shell-Skripten mit '#' ein Kommentar eingeleitet, mit der Kombination '#!' in der allerersten Zeile hingegen wird ein Interpreter definiert. Du könntest das Skript auch in PHP schreiben und dann in der allerersten Zeile '#!/usr/bin/php' angeben, das Skript würde unter Verwendung des PHP-Interpreters ausgeführt werden. Analog Perl, awk und so weiter ...
Desweiteren kannst Du auch gültige Kommandozeilenoptionen an den aufgeführten Interpreter übergeben (Standard für's Shell-Skript debugging: '+xvu' = eXpand, Verbose, halt on Unset variables)

Weiterhin wird nach dem Erkennen des Interpreters eine neue Instanz desselben aufgerufen und damit gehen die "Pingeligkeiten" los :( Je nach Distri, Shell, Konfiguration usw. erhält dieser Interpreter nun entweder die systemweit gültige (bei der bash in /etc/bashrc definierte) Umgebung oder aber (auch) diejenige des ausführenden oder aber angemeldeten Users zugewiesen. D.h. viele Pfade, Umgebungsvariablen etc. existieren nicht oder haben andere Werte. Ein nicht wirklich lustiges Verhalten und auch immer wieder gerne Ursache für scheinbar unerklärliches Verhalten von Skripten :(

Lässt Du hingegen die Angabe des Interpreters weg gilt Deine spezifische Umgebung, also Umgebungsvariablen, Pfade usw.
Da Du ja zunächst herausfinden willst was bei Deinem wget falschläuft bürdet Dir diese "erste Zeile" momentan eher unnötige Schwierigkeiten auf. Ich würd' sie also bis zur Klärung der Ursache zunächst rauslassen.

Jetzt zu Deinem Skript, bzw. der von Dir geposteten Ausgabe. Du hast das Ding zufälligerweise nicht zufällig offline in einem Windows-Editor erstellt und dann per FTP hochgeladen?
lässt nämlich den Schluss zu, dass so etwas passiert sein könnte. Zumindest das Anführungszeichen (") am Anfang ist merkwürdig (ich gehe aber davon aus, dass Du die Ausgabe zitieren wolltest), das '%D' am Ende ist es aber auf alle Fälle und könnte wget dazu veranlassen, eine Verzeichnisstruktur zu ziehen die so nicht existiert ...
Alternativ kannst Du ja auch mal den Asterisk ('*') weglassen - in der manpage zu wget stehen Beispiele in denen lediglich der Pfadname mit abschließendem '/' aber ohne '*' verwendet werden ...
Und mit --verbose undd --append-output=<logfile> kannst Du auch noch erweiterte Meldunge sammeln die bei der Fehlersuche behilflich sein könn(t)en.

Windows war schuld

Posted: 2003-05-06 21:57
by trinita
Hallo !

Das Problem war in der Tat, daß ich die Datei unter Windows erstellt hatte ...

Danke nochmal für die Hinweise,
trinita

Re: batch-Datei in Linux

Posted: 2003-05-07 09:09
by distanzcheck
könnte man hiermit auch dat files von einem server auf einen anderen server übertragen ohne das es gepackt wird ??? und auch überschreiben der files auf dem ziel server sollte ohne nachfrage gehen.

Dirk

Re: batch-Datei in Linux

Posted: 2003-05-07 19:14
by dea
distanzcheck wrote:könnte man hiermit auch dat files von einem server auf einen anderen server übertragen ohne das es gepackt wird ??? und auch überschreiben der files auf dem ziel server sollte ohne nachfrage gehen.

Dirk
Ich rate jetzt einfach mal ... (wäre nett, wenn Du Deine Frage spezifizieren könntest)

Du willst mit wget irgendwelche Files von Maschine A nach Maschine B bringen ohne, dass diese gepackt werden. Klar geht das. Dazu rufst Du auf Maschine B wget auf und übergibst dem die nötigen Paraneter. Allerdings muss dazu auf Maschine A ein Web- oder FTP-Server laufen und die Dateien in für den betroffenen Server-Dienst (http/FTP) zugänglichen Verzeichnis liegen.

Alternativ könnt Ihr Euch aber auch mal mit rsync oder scp/sftp beschäftigen ...

Re: batch-Datei in Linux

Posted: 2003-05-07 19:56
by distanzcheck
also ich beschreibe es mal kurz

Auf Serve A und Server B sind jeweils Verzeichnisse ../Members
In diesem Verzeichniss gibt es z.Zt ca. 400 Dateien alle mit unregelmäßig selbst erstellenden dateinamen zb. 8346328423194.dat usw.

Die Dateien auf Server A ändern sich ständig.

deshalb sollen diese dateien täglich 2-3 mal auf Server B übertragen werden und ggf. auch überschrieben werden.

Hoffe ich habe mich verständlich ausgedrückt.

Nach rsync habe ich schon gesucht aber nix gefunden und auch nicht wie man es installiert.

Dirk

Re: batch-Datei in Linux

Posted: 2003-05-07 21:55
by captaincrunch
Vielleicht bringen dich folgende Links in punkto rsync weiter : http://rsync.samba.org/fom-serve/cache/1.html
http://everythinglinux.org/rsync/

Re: batch-Datei in Linux

Posted: 2003-05-07 21:59
by distanzcheck
leider nicht wirklich, weiß zb. nicht welches rpm ich runter laden muß. (Suse 7,2)

Dirk

Re: batch-Datei in Linux

Posted: 2003-05-07 22:01
by captaincrunch
Ich hab dann einfach mal http://rpmseek.org für dich angeworfen : http://rpmseek.com/rpm-pl/rsync.html?hl ... &qDnStr=11

Re: batch-Datei in Linux

Posted: 2003-05-08 00:45
by dea
Holla!! Immer mit der Ruhe!

Vor allem bei rsync gilt: Bitteerst die Doku lesen und nur installieren, wenn man es auch verstanden hat! Sondt machst Du nämlich (schlimmstenfalls) Tür und Tor auf und das kann es ja auch nicht sein.

Das schöne bei rsync ist halt, dass es zum einen sehr flexibel und mächtig ist und zudem noch ein eigenständiger Dienst ist der nicht von anderen Diensten abhängig ist.
Dummerweise ist das dann auch gleichzeitig die Kehrseite der Medaille ... :?

Je nun - gerade bei Deiner Aufgabenstellung scheint mir rsync ein probates Mittel zu sein. Lies halt mal und überleg' Dir ob es sinnvoll ist.

Re: batch-Datei in Linux

Posted: 2003-05-09 12:31
by distanzcheck
welches von diesen wäre denn das richtige ?

Habe Suse 7.2



Dirk

Code: Select all

 rsync-2.4.6-101.i386.rpm SuSE 7.2  2.4.6 101 i386  
 rsync-2.4.6-101.src.rpm SuSE 7.2  2.4.6 101 src  
 rsync-2.4.6-362.i386.rpm SuSE 7.2 Updates 2.4.6 362 i386  
 rsync-2.4.6-362.src.rpm SuSE 7.2 Updates 2.4.6 362 src  

Re: batch-Datei in Linux

Posted: 2003-05-09 12:33
by distanzcheck
gibbet da auch ne deutsche Anleitung, Doku zu ??? oder noch besser nen deutsches HowTo

Dirk

Re: batch-Datei in Linux

Posted: 2003-05-09 12:33
by captaincrunch
rsync-2.4.6-362.i386.rpm SuSE 7.2 Updates 2.4.6 362 i386

Re: batch-Datei in Linux

Posted: 2003-05-12 19:15
by distanzcheck
gibts denn da ein deutsches How To für ???

Dirk

Re: batch-Datei in Linux

Posted: 2003-05-14 15:23
by dea
NIcht, dass mir momentan eine bekannt wäre. Aber versuch's doch bitte mal bei Google und beim LDP (http://tldp.org) ...

In der Linux/UNIX-Welt sollte man schon einigermaßen gut Englisch verstehen können sonst ist man ziemlich schnell aufgeschmissen ...

Re: batch-Datei in Linux

Posted: 2003-05-14 19:31
by burgi
distanzcheck wrote:gibts denn da ein deutsches How To für ???

Dirk
Schau dir mal http://server.1und1.com/root_server/backup/5.html an!

Re: batch-Datei in Linux

Posted: 2003-05-15 00:00
by coolsurfer
Hi
Vor allem bei rsync gilt: Bitteerst die Doku lesen und nur installieren, wenn man es auch verstanden hat! Sondt
Das sicherste dürfte wohl sein, man setzt gar keinen rsync Server auf, sondern lässt den "rsync-Client" ganz normal über SSH mit Key's connecten.

Funktioniert hier zumindest tadellos; es wird auch tatsächlich nur das abgeglichen, was sich verändert hat.

Code: Select all

/usr/bin/rsync -av --delete -e ssh <user>@<server>:/<QuellDir>/* /<Zielverzeichnis>/
coolsurfer

Re: batch-Datei in Linux

Posted: 2003-05-15 08:54
by distanzcheck
@coolsurfer

wie muß ich das denn machen ?

bei server 1 und 2 liegen die Daten die ich abgeleichen (kopieren und evtl. überschreiben) will jeweils in html/perl/gtchat05/members/daten.dat

und wie erstelle ich die keys ?

Gruß Dirk

Nachtrag: wäre das schonmal ein anfang ?

Code: Select all

/usr/bin/rsync -av --delete -e ssh <user>@<server>:/<home/www/web3/html/perl/gtchat95/members/daten.dat>/* /<home/www/web7/html/perl/gtchat95/members/daten.dat>/
und was muß ich hier

Code: Select all

<user>@<server>:/
eintragen ?

Und das dann als Cronjob laufen lassen ?

Dirk