Shellscirpt: Error bei tar

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Cpt. Rick
Beiträge: 15
Registriert: 07.01.2007 14:19:47
Kontaktdaten:

Shellscirpt: Error bei tar

Beitrag von Cpt. Rick » 15.01.2007 22:36:36

Ich habe mir ein kleines backupscript geschrieben und mußte es nun ändern, da ich meine Ordner etwas geändert habe. Und siehe da: es funktioniert nicht mehr :evil:

Code: Alles auswählen

if [ -r /mdeia/YTON/Schule ]
then
  cd /media/YTON
  tar -cvf Schule.tar /Schule
  mv /home/arne1/schule-backup/Schule.tar /home/arne1/schule-backup/Schule-alt.tar
  mv Schule.tar /home/arne1/schule-backup/
  rm /home/arne1/schule-backup/Schule-alt.tar
  echo"Das backup wurde ausgeführt"
else
  echo"YTON konnte nicht gefunden werden"
fi
Die Fehlermeldung taucht schon beim tar befehl auf.

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 15.01.2007 23:37:40

Code: Alles auswählen

[...]
  cd /media/YTON
  /bin/tar -cvf Schule.tar Schule    
[...]
willst Du /media/YTON/Schule sichern oder /Schule ?

Gruß fuzzy

PS: ist es eventuell hilfreich noch mehrere alte/ältere Backups aufzubewahren?

Cpt. Rick
Beiträge: 15
Registriert: 07.01.2007 14:19:47
Kontaktdaten:

Beitrag von Cpt. Rick » 15.01.2007 23:44:37

fuzzy hat geschrieben:

Code: Alles auswählen

[...]
  cd /media/YTON
  /bin/tar -cvf Schule.tar Schule    
[...]
willst Du /media/YTON/Schule sichern oder /Schule ?
Ich möchte den Ordner "Schule" auf /media/YTON/ sichern, bzw. in ein tar komprimieren.
Und warum: /bin/tar ?
fuzzy hat geschrieben: PS: ist es eventuell hilfreich noch mehrere alte/ältere Backups aufzubewahren?
Ein backup reicht aus. Es ist auch nur eine Sicherung falls mein USB-Stick kaputt geht.

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 15.01.2007 23:57:40

Cpt. Rick hat geschrieben: Ich möchte den Ordner "Schule" auf /media/YTON/ sichern, bzw. in ein tar komprimieren.
Und warum: /bin/tar ?
geht es denn mit meiner kleinen Befehlsanpassung besser?
nach cd /media/YTON/ brauchst Du erstmal nur "Schule" zu sichern und nicht "/Schule" - soweit ich das Blicke :wink:

Äh, da war ich wohl etwas vorschnell, ich hatte vermutet, dass Du das Shellscript als cronjob laufen lässt..., dann sind absolute Pfade meist hilfreich.

Gruß fuzzy

DeletedUserReAsG

Beitrag von DeletedUserReAsG » 16.01.2007 05:59:07

Die Fehlermeldung taucht schon beim tar befehl auf.
Und die sollen wir erraten, oder habe ich etwas übersehen?

cu

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 16.01.2007 10:10:07

Btw. das cd vor dem tar kannst du dir sparen, wenn du die Option -C Verzeichnis mit angibst.
/bin/tar deshalb, weil man in Skripten nie davon ausgehen sollte, dass PATH korrekt gesetzt ist. Deshalb lieber mit kompletten Pfaden arbeiten bzw. PATH am Anfang des Skripts selber setzen.

Und wie niemand bereits sagte, die Fehlermeldung als solches wäre hilfreich ;)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 16.01.2007 11:14:36

eine vernünfige Fehlerbehandlung würde ich auch noch empfehlen. z.B wird

Code: Alles auswählen

 rm /home/arne1/schule-backup/Schule-alt.tar
selbst dann ausgeführt, wenn durch die vorhergehenden Kommandos kein Schule.tar erzeugt wurde.
Nach der Ausführung des Scripts hast du also möglicherweise überhaupt kein Backup mehr, bekommst aber trotzdem die trügersiche Meldung

Code: Alles auswählen

 echo"Das backup wurde ausgeführt"
Gruß
gms

Sil53r
Beiträge: 2
Registriert: 16.01.2007 12:19:36

Re: Shellscirpt: Error bei tar

Beitrag von Sil53r » 16.01.2007 12:40:13

Cpt. Rick hat geschrieben:Ich habe mir ein kleines backupscript geschrieben und mußte es nun ändern, da ich meine Ordner etwas geändert habe. Und siehe da: es funktioniert nicht mehr :evil:

Code: Alles auswählen

if [ -r /mdeia/YTON/Schule ]
then
  cd /media/YTON
  tar -cvf Schule.tar /Schule
  mv /home/arne1/schule-backup/Schule.tar /home/arne1/schule-backup/Schule-alt.tar
  mv Schule.tar /home/arne1/schule-backup/
  rm /home/arne1/schule-backup/Schule-alt.tar
  echo"Das backup wurde ausgeführt"
else
  echo"YTON konnte nicht gefunden werden"
fi
Die Fehlermeldung taucht schon beim tar befehl auf.
Du versuchst, einen Tarball von einem Verzeichnis auf der Root-Ebene ("/Schule") anzulegen, das mit hoher Wahrscheinlichkeit gar nicht existiert. Eigentlich willst Du aber das Verzeichnis "Schule" unterhalb von "/media/YTON" sichern, also

Code: Alles auswählen

  tar -cvf Schule.tar Schule
Wenn Du das voranstehende Slash aus dem Pfad nimmst, meckert tar auch nicht länger. - Dein Backup-Skript läßt sich mit wenig Aufwand noch etwas vereinfachen und gleichzeitig erweitern:

Code: Alles auswählen

if [ -r /mdeia/YTON/Schule ]
then

  archive="/home/arne1/schule-backup/$(date -Iseconds | cut -d+ -f1 | tr T -)-Schule.tar"

  cd /media/YTON
  tar -cvf ${archive} Schule
  if [ -f "${archive}" ]
  then
    echo "Das Backup wurde ausgeführt."
  else
    echo "FEHLER: Das Backup-Archiv konnte nicht angelegt werden!"
  fi
else
  echo "FEHLER: YTON konnte nicht gefunden werden!"
fi
1) Wenn Du dem Backup "archive" einen Zeitstempel voranstellst, erhältst Du erstens Archive, die namentlich eindeutig sind (sich von anderen unterscheiden) und zweitens in der Verzeichnisliste automatisch "sortiert" dargestellt werden, was die Übersichtlichkeit auf Dauer sehr erleichtert.
2) Vorausgesetzt, Schreibrechte bestehen, kann das Archiv nun gleich von tar ins Zielverzeichnis geschrieben werden. Auf diese Weise spart man mehrere Kopier- und Löschvorgänge.
3) In Ausgaben und Logdateien erhöht es die Unterscheidbarkeit von anderen Meldungen, wenn man auftretende Fehler deutlich als solche kennzeichnet. Ich habe mir daher die voranstehende Markierung und das abschließende Ausrufezeichen angewöhnt. YMMV

Cpt. Rick
Beiträge: 15
Registriert: 07.01.2007 14:19:47
Kontaktdaten:

Beitrag von Cpt. Rick » 16.01.2007 17:55:05

Danke für die zahlreiche Antworten!
@Sil53r: Das sieht sehr sinnvoll aus und ich werden es auch gelich mal testen :)
Ich habe nur noch nicht ganz verstanden was in folgendem Teil ausgeführt wird:

Code: Alles auswählen

$(date -Iseconds | cut -d+ -f1 | tr T -) 

Cpt. Rick
Beiträge: 15
Registriert: 07.01.2007 14:19:47
Kontaktdaten:

Beitrag von Cpt. Rick » 16.01.2007 19:04:17

Wenn ich das Script ausführe erhalte ich folgende Meldung:

Code: Alles auswählen

[: 20: missing ]
FHELER: Das Backup-Archive konnte nicht angelegt werden!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 16.01.2007 20:51:28

Cpt. Rick hat geschrieben:Wenn ich das Script ausführe erhalte ich folgende Meldung:
hast du vielleicht beim Abtippen einen Fehler eingebaut ?

führe das Script einmal mit "bash -x SCRIPTNAME" aus und poste bitte die Ausgabe

Gruß
gms

Cpt. Rick
Beiträge: 15
Registriert: 07.01.2007 14:19:47
Kontaktdaten:

Beitrag von Cpt. Rick » 16.01.2007 21:11:52

Yep, es war ein kleiner Fehler, hatte ein Leerzeichen vergessen :roll:

Jetzt funktioniert das Script einwandfrei, vielen Dank für eure Hilfe!

Antworten