dani
Goto Top

Problem mit Shellscript

Guten Abend,

ich habe folgendes Problem:
Ich habe ein ganz kl. Shellscript. Dieses soll mit Hilfe der Suse 9.3 Mail - Funktion eine Datei verschicken!

Shellcript:
#!/bin/bash
table=$1

date --universal +%d-%m-%Y >/tmp/tag.var
tag="$(cat /tmp/tag.var)"  
rm /tmp/tag.var

mail xx@yy.de -s test  -a /test/t-$tag.sh << /root/text  #ein < gehört weg

Nun erscheint immer der Fehler das die Datei oder das Verzeichnis nicht existiert. Habe den Pfad 10x schon verglichen -> passt. Nun wenn ich das Datum hinten fest eintrage funktioniert es!
Weiß jemand weiter??

Gruß
Dani

Content-Key: 28378

Url: https://administrator.de/contentid/28378

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: stpe
stpe 16.03.2006 um 22:03:22 Uhr
Goto Top
zum einen, warum schreibst Du nicht einfach:

tag="`date --universal +%d-%m-%Y`"

zum zweiten:

was bezweckt "-a /test/t-$tag.sh"??
Moechtest Du den Inhalt aus /test/t-$tag.sh als Header-Informationen uebergeben? Das geht leider so nicht, denn "-a" liest keine Datei als Parameter ein. Du müsstest den Wert anders übergeben, z.B.

header=`cat /test/t-$tag.sh`

und dann

mail ... -a "$header"

Wenn t-$tag.sh ein Shellscript ist, verstehe ich den sinn nicht ganz.

Gruss
Stefan
Mitglied: Dani
Dani 16.03.2006 um 22:09:24 Uhr
Goto Top
Hi,
ok.... -a heißt Anhang (Datei anhängen). Sry..das muss t-$tag.sql heißen.


Gruß
Dani
Mitglied: stpe
stpe 16.03.2006 um 22:30:17 Uhr
Goto Top
Was für ein "mail" benutzt Du? Gnu Mail hat als Parameter "-a" (und auf diese Weise schon vielfach von mir genutzt:

"GNU mail -- the standard /bin/mail interface
-a, --append=HEADER: VALUE Append given header to the message being sent."

Wenn's bei Deinem Mailer wirklich ein Dateianhang ist:

Probier mal eine erweiterte Version der Datumszuweisung:

anhang="/test/t-`date --universal +%d-%m-%Y`.sql" und dann
mail -s test -a "$anhang" xx@yy.de ...
Mitglied: ITwissen
ITwissen 17.03.2006 um 06:02:30 Uhr
Goto Top
Erstmal die gute Nachricht, auf meinem Linux laeuft das Script fehlerfrei.

Somit bist du von der Loesung nicht allzuweit entfernt.

Gehen wir zum Debugging ueber, um rauszufinden, wo es bei dir klemmt.

Kannst du mal das Script folgendermassen aufrufen und den output hier posten:

bash -xv script

#!/bin/bash
table=$1
+ table=

date --universal +%d-%m-%Y >/tmp/tag.var
+ date --universal +%d-%m-%Y
tag="$(cat /tmp/tag.var)"  
cat /tmp/tag.var
++ cat /tmp/tag.var
+ tag=17-03-2006
rm /tmp/tag.var
+ rm /tmp/tag.var

mail root -s test -a /tmp/t-$tag.sh < /tmp/text
+ mail root -s test -a /tmp/t-17-03-2006.sh
Mitglied: Dani
Dani 17.03.2006 um 08:22:14 Uhr
Goto Top
Hi,
was macht das + bzw ++?!
Also wenn ich dich richtig verstanden habe, möchtest du den Dateinamen statisch haben. Nun, kann ich dir sagen, dass das geht.

Gruß
Dani
Mitglied: ITwissen
ITwissen 17.03.2006 um 09:35:57 Uhr
Goto Top
Das im Kasten ist der Output von "bash -xv script".

back-to-topund ++ sind die Zeilen, wie sie wirklich ausgefuehrt werden, nach aufloesen aller Variablen.

Mitglied: stpe
stpe 17.03.2006 um 09:55:38 Uhr
Goto Top
Bloede Frage, was für ein "mail" benutzt Ihr?? (Die Ausgabe von mail --help würde mir schon helfen). Normalerweise ist es nämlich eine große Bastelei, mit Mail auch Dateianhänge zu übertragen. Meist behelfe ich mir in diesem Fall mit einem PHP-Script. Wäre ja schön, wenn ich zukünftig auf der Shell bleiben könnte.

Tia
Stefan
Mitglied: Dani
Dani 17.03.2006 um 21:33:06 Uhr
Goto Top
Abend,
und was soll ich jetzt machen? Versteh grad nicht auf was du hinaus möchtest?!
Sorry...

Gruß
Dani
Mitglied: stpe
stpe 17.03.2006 um 21:39:04 Uhr
Goto Top
ITwissen meint, Du sollst Dein Script mal mit der Eingabe von

bash -xv scriptname

aufrufen.

Die Bash führt das Script dann verbose aus, d.h. es werden Informationen beim Ablaufen des Scriptes mit ausgegeben.

Die Zeilen mit dem führenden "+" sind Informationen für Dich, die Dir zeigen, welcher Befehl denn jetzt gerade wirklich ausgeführt wurde, die Variablen werden nicht unter ihren Namen, sondern mit ihren aktuellen Werten ausgegeben.

Das Ganze sollte Dir helfen, den "Fehler" zu orten.

Gruss
Stefan

Und wenn Du mit Deiner Nachfrage meinen Post meintest: Mich interessiert einfach die Ausgabe von "mail --help" auf Deiner Konsole ;)
Mitglied: Dani
Dani 17.03.2006 um 21:42:40 Uhr
Goto Top
Abend,
das kommt dabei raus:
#Ließt den 1.Para aus
table=$1

back-to-toptable=tennis


#Ließt das aktuelle Datum aus
date --universal +%d.%m.%y >/tmp/tag.var

back-to-topdate --universal +%d.%m.%y

tag="$(cat /tmp/tag.var)"
cat /tmp/tag.var

back-to-topcat /tmp/tag.var

back-to-toptag=17.03.06

rm /tmp/tag.var

back-to-toprm /tmp/tag.var


mail webmaster@hochdorf-tennis.de -s MySQL-Dump -a /var/www/vhosts/hochdorf-tenn is.de/backup/mysql/$table-$tag.sql </var/www/vhosts/hochdorf-tennis.de/scripte/ mail_sql.txt

back-to-topmail webmaster@hochdorf-tennis.de -s MySQL-Dump -a /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql

/var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql: No such file or directory


mail ausgabe:
v25161:~ # mail --help
mail: illegal option -- -
Usage: mail [-BDFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr]
[-r from-addr] [-h hops] [-A account] [-R reply-addr] to-addr ...
mail [-BDeHiInNv~] [-T name] [-A account] -f [name]
mail [-BDeinNv~] [-A account] [-u user]


Gruß
Dani
Mitglied: stpe
stpe 17.03.2006 um 21:47:27 Uhr
Goto Top
Und wenn Du "mail webmaster@hochdorf-tennis.de -s MySQL-Dump -a /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql "
direkt auf der Konsole eingibst, dann funktioniert das?

Läuft das Script unter dem gleichen User?
Mitglied: Dani
Dani 17.03.2006 um 21:52:38 Uhr
Goto Top
Hi,
ich habe die Rechte der Datei schon auf 777 gesetzt.Ob das gut ist oder nicht, geht mir grad am A vorbei. Die Ordner zu der Datei sind auch ok. Läuft im Moment als root.

also direkt an der Konsole geht es!


Gruß
Dani
Mitglied: stpe
stpe 17.03.2006 um 22:02:55 Uhr
Goto Top
Blöde Idee, aber es sollte Dich beim Debuggen hoffentlich einen Schritt weiterbringen:

Mach vor dem "mail" mal einen "cd /var/..." und übergib dann als Anhang nur den Dateinamen.
Mitglied: Dani
Dani 17.03.2006 um 22:15:02 Uhr
Goto Top
G' Abend,
bringt nichts...


Gruß
Dani
Mitglied: stpe
stpe 17.03.2006 um 22:25:10 Uhr
Goto Top
Momentan fehlt mir da jetzt auch die nächste Idee. Aber das Problem interessiert mich jetzt schon. Ich besorge mir mal eine SuSE 9.3 und stelle das nach. Allerdings kann das noch zwei, drei Tage dauern, da ich morgen nicht am Rechner bin.

Hoffe das reicht aus.

Eine Probiermalkurzaus-Idee wäre noch, am Anfang des Scriptes die PATH-Variable mit allen relevanten Pfaden (sowohl von den Binaries, als auch vom zu mailenden Anhang) zu setzen.

Gruss
Stefan

und poste bitte auch noch einmal die Ausgabe Deines letzten Versuches mit dem "cd ..." vorneweg. Tia
Mitglied: Dani
Dani 17.03.2006 um 22:29:53 Uhr
Goto Top
G' Abend,
Eine Probiermalkurzaus-Idee wäre noch,
am Anfang des Scriptes die PATH-Variable mit
allen relevanten Pfaden (sowohl von den
Binaries, als auch vom zu mailenden Anhang)
zu setzen.

Wie geht das??


Gruß
DAni
Mitglied: ITwissen
ITwissen 17.03.2006 um 22:37:23 Uhr
Goto Top
Ich denke wir sollten uns auf die Datei konzetrieren bei der Fehlersuche.

/var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql

Du sagst ja, dass die Datei da ist. Das hast du 10x geprueft.

Das einzige was mir dazu noch einfaellt waere, dass der Dateiname vielleicht noch ein Leerzeichen am Ende oder irgendwo ein anderes "unsichtbares" Zeichen drin hat, welches man so nicht gleich sieht?

Was sagt denn:
ls -lb /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql
Mitglied: stpe
stpe 17.03.2006 um 22:42:44 Uhr
Goto Top
Das einzige was mir dazu noch einfaellt
waere, dass der Dateiname vielleicht noch
ein Leerzeichen am Ende oder irgendwo ein
anderes "unsichtbares" Zeichen
drin hat, welches man so nicht gleich sieht?

Dann wäre ein direkter Aufruf von mail ja auch nicht erfolgreich. An Sonderzeichen hatte ich auch schon gedacht, z.B. wenn beim Füllen der Variablen ein solches erzeugt würde. Aber das ist imho hier nicht der Fall. Probieren könnte man dies mit:

mail xx@yy.de -s test -a /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-`date --universal +%d.%m.%y`.sql

direkt aus der Console aufgerufen.

Gruss
Stefan
Mitglied: Dani
Dani 18.03.2006 um 01:59:32 Uhr
Goto Top
Hi,
Was sagt denn:
ls -lb
/var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.06.sql

Ergebnis:
-rw-r--r-- 1 root root 120005 Mar 18 00:05 /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-17.03.2006.sql

Dann wäre ein direkter Aufruf von mail ja auch nicht erfolgreich. An Sonderzeichen hatte >ich auch schon gedacht, z.B. wenn beim Füllen der Variablen ein solches erzeugt würde. >Aber das ist imho hier nicht der Fall. Probieren könnte man dies mit:

mail xx@yy.de -s test -a /var/www/vhosts/hochdorf-tennis.de/backup/mysql/tennis-`date ->-universal +%d.%m.%y`.sql

KEINE FEHLERMELDUNG!!!!! Danke...an alle für ihren Einsatz! *g*
Gute Nacht...

Gruß
Dani