crontab skript

F

flamev

Mitglied
Thread Starter
Dabei seit
19.01.2007
Beiträge
54
Reaktionspunkte
0
hi,ich möchte gerne einen cron job einrichten der mir von einen anderen server jeden montag ein backup abholt und mit datum archiviert. In diesem Zuge sollen alle Backups die älter sind wie 28 gelöscht werden. Dazu habe ich mir folgendes ausgedacht:

Cronjob amlegen mit crontab -e:
0 0 * * 1 /home/usr/backupskript.sh


Datei anlegen mit dem Namen backupskript.sh und folgendem Inhalt:
#Backup Directory setzen
DIR="/home/appleserver/backup/"

# Datum setzen
DATUM=`date +"%Y%m%d"`

# Backup ziehen
ssh fred@76.111.31.134 "ncftpget -v -c -u fred -p kalle18htf backup.fred.de fullbackup/backup-Sunday.tar.gz.aes256" > $DIR.backup-Sunday.$DATUM.tar.gz.aes256

# Alle Backups älter wie 28 Tage löschen
find $DIR -ctime 28 -name access_log\* -exec rm {} \;


Müsste das funktionieren oder sieht jemand einen Fehler?
 
Es fehlt die shebang Zeile im Skript, das Skript muss außerdem natürlich ausführbar sein.
Ich würde dazu raten im Skript volle Pfadnamen für die Kommandos zu verwenden, obwohl das i.d.R nicht unbedingt erforderlich ist.
Wie macht Du die Authentifizierung beim ssh-Server?

Beim find-Kommando ist mir noch nicht klar, wie Dateien mit dem Namen "name access_log\*" gefunden werden sollen, wenn Du sie vorher unter dem Namen "$DIR.backup-Sunday.$DATUM.tar.gz.aes256" abspeicherst.

Anstelle von "-exec rm ..." köntest Du auch einfach "-delete" nehmen ;).

HTH
 
Hi, danke schon mal für die Antwort. Welche "bash" nutzt Apple? ich habe jetzt mal die #!/bin/bash eingetragen, ausserdem habe ich das find abgeändert .-) Copy and Paste Fehler :) Die Authenifizierung erfolg per Key. Hier das abgeänderte Skript - besser so :)

Grüße!


Cronjob amlegen mit crontab -e:
0 0 * * 1 /home/usr/backupskript.sh

Datei anlegen mit dem Namen backupskript.sh und folgendem Inhalt:
#!/bin/bash

#Backup Directory setzen
DIR="/home/appleserver/backup/"

# Datum setzen
DATUM=`date +"%Y%m%d"`

# Backup ziehen
ssh fred@76.111.31.134 "ncftpget -v -c -u fred -p kalle18htf backup.fred.de fullbackup/backup-Sunday.tar.gz.aes256" > $DIR.backup.$DATUM.tar.gz.aes256

# Alle Backups älter wie 28 Tage löschen
find $DIR -ctime 28 -name backup*.* -delete;
 
flamev schrieb:
...
Welche "bash" nutzt Apple?
...
Auf meinem System (10.4.8) sieht das so aus (ist aber von der Systemversion abhängig:
Code:
bash --version
GNU bash, version 2.05b.0(1)-release (powerpc-apple-darwin8.0)
Copyright (C) 2002 Free Software Foundation, Inc.

which bash
/bin/bash

Es stehen aber auch andere Shells (sh, tcsh, zsh, ksh etc.) zur Verfügung.
Dürfte aber für Dein Skript nicht relevant sein.

Hast Du Dein Skript denn schon mal von Hand getestet? Kann ja nicht viel schiefgehen.
 
> find $DIR -ctime 28 -name backup*.* -delete;

'backup*.*' in Hochkommas einschließen, sonst expandiert bash die Wildcard sofern möglich und nicht find.

-Ralph
 
ja, hatte ich übersehen; oben hat er den * noch escaped.
 
ok, hab die sachen mal abgeändert und mal einen testlauf gemacht - da die updates so hammergroß sind werde ich wohl erst morgen mehr wissen .-)

eine frage habe ich aber noch. wenn ich unter der bash in einen pfad wechseln will der eine leertaste im namen hat wie mache ich das dann?!
dachte eigentlich, dass z.B.
cd /Shared Items/ funktioniert - das mag er aber nicht. Die 2 Frage ist, wie bekomme ich die BASH so eingestellt, das Sie die deutsche Tastatur aktzeptiert?

Danke :)
 
flamev schrieb:
...
eine frage habe ich aber noch. wenn ich unter der bash in einen pfad wechseln will der eine leertaste im namen hat wie mache ich das dann?!
dachte eigentlich, dass z.B.
cd /Shared Items/ funktioniert - das mag er aber nicht.
...
Das liegt am wordsplitting der Shell. Die Shell zerlegt zunächste einmal die Kommandozeile in einzelne Worte.
Beim cd Kommando ist nur ein Verzeichnis möglich => also Error.

Und selbst wenn bei einem Kommando zwei Pfadangaben möglich wären, würde das Kommando nicht auf die von Dir erwartete Weise funktionieren, denn dann würde die Shell nach den Pfaden "/Shared" und "./Items" suchen.
Im besseren Fall gibt es die nicht und Du bekommst einen "no such file or directory" error. Im schlechteren Fall wird Dein Kommando auf den falschen Dateien ausgeführt.

Du musst das Leerzeichen also maskieren. Dazu gibt es verschiedene Möglichkeiten, z. B.
/Shared\ Items
"/Shared Items"
'/Shared Items'

Eigentlich gehört Deine Frage auch nicht nach "Mac OS X Server" sondern ins Unix Unterforum. Ich lass das mal verschieben.

So, und da sicher noch mehr Fragen von Dir kommen werden, geb ich Dir mal eine kleine Hausaufgabe auf:
Bitte lesen!"Das mag er nicht" ist nämlich eigentlich keine Fehlerbeschreibung ;).
Und hier noch etwas Stoff zum Einlesen in die bash.
 
Zuletzt bearbeitet:
Schuldigung wegen der flapsigen Fehlerbeschreibung. Das Skript habe ich nun nochmals getestet und es scheint auch schon fast zu funktioniern. Das Backup wird geladen, nur die Benamung ist noch falsch. Hier also nochmals das Skript:

Cronjob amlegen mit crontab -e:
0 0 * * 1 /home/usr/backupskript.sh

Datei anlegen mit dem Namen backupskript.sh und folgendem Inhalt:
#!/bin/bash

#Backup Directory setzen
DIR="/home/appleserver/backup/"

# Datum setzen
DATUM=`date +"%Y%m%d"`

# Backup ziehen
ssh fred@76.111.31.134 "ncftpget -v -c -u fred -p kalle18htf backup.fred.de fullbackup/backup-Sunday.tar.gz.aes256" > $DIR.backup.$DATUM.tar.gz.aes256

# Alle Backups älter wie 28 Tage löschen
find $DIR -ctime 28 -name 'backup*.*' -delete;

Und hier der Name der Backupdatei der produziert wird:
.backup.date +"%Y%m%d".tar.gz.aes256

So wie es aussieht, werden die Variablen $DIR und $DATUM nicht richtig verarbeitet - hätte da noch jemand einen Tip?
 
Sorry, hab nicht sorgfältig genug gelesen.

Kann keinen Fehler finden:
Code:
#!/bin/bash

DIR="/home/appleserver/backup/"
DATUM=`date +"%Y%m%d"`
echo $DIR.backup.$DATUM.tar.gz.aes256

Ausgabe:
/home/appleserver/backup/.backup.20070128.tar.gz.aes256

Dir sollte aber klar sein, dass Namen, die mit einem Punkt beginnen unsichtbare Dateien erzeugen und zudem von Deinem 'find'-Kommando nicht gefunden werden, da Dein Suchmuster nicht passt.
 
Zuletzt bearbeitet:
So jetzt hat endlich alles geklappt :) Funktioniert wunderbar. Eine Frage hätte ich noch zum Cronjob:

muss das sh als "interpreter" dazu oder muss man es weg lassen:
Möglichkeit 1:
0 0 * * 1 /applications/backupskript.sh
Möglichkeit 2:
0 0 * * 1 sh /applications/backupskript.sh

Danke nochmals :)
 
Kann man weglassen.
Voraussetzungen:
Das Skript hat einen She-bang und ist ausführbar.

flamev schrieb:
So jetzt hat endlich alles geklappt :) Funktioniert wunderbar.
...
Was hast Du geändert?
 
Eigentlich nur das er vorher in das betreffende Verezeichniss wechseln soll, da die Variable $DIR nicht aufgelöst wurde:

Datei anlegen mit dem Namen backupskript.sh und folgendem Inhalt:
#!/bin/bash

#Backup Directory setzen
cd /home/appleserver/backup/

# Datum setzen
DATUM=`date +"%Y%m%d"`

# Backup ziehen
ssh fred@76.111.31.134 "ncftpget -v -c -u fred -p kalle18htf backup.fred.de fullbackup/backup-Sunday.tar.gz.aes256" > backup.$DATUM.tar.gz.aes256

# Alle Backups älter wie 28 Tage löschen
find $DIR -ctime 28 -name 'backup*.*' -delete;
 
Zurück
Oben Unten