crontab skript

Diskutiere mit über: crontab skript im Mac OS X - Unix & Terminal Forum

  1. flamev

    flamev Thread Starter MacUser Mitglied

    Beiträge:
    54
    Zustimmungen:
    0
    Registriert seit:
    19.01.2007
    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?
     
  2. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    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
     
  3. flamev

    flamev Thread Starter MacUser Mitglied

    Beiträge:
    54
    Zustimmungen:
    0
    Registriert seit:
    19.01.2007
    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;
     
  4. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    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.
     
  5. slowfranklin

    slowfranklin MacUser Mitglied

    Beiträge:
    233
    Zustimmungen:
    5
    Registriert seit:
    28.11.2005
    > find $DIR -ctime 28 -name backup*.* -delete;

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

    -Ralph
     
  6. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    ja, hatte ich übersehen; oben hat er den * noch escaped.
     
  7. flamev

    flamev Thread Starter MacUser Mitglied

    Beiträge:
    54
    Zustimmungen:
    0
    Registriert seit:
    19.01.2007
    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 :)
     
  8. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    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: 28.01.2007
  9. flamev

    flamev Thread Starter MacUser Mitglied

    Beiträge:
    54
    Zustimmungen:
    0
    Registriert seit:
    19.01.2007
    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?
     
  10. maceis

    maceis MacUser Mitglied

    Beiträge:
    16.645
    Zustimmungen:
    596
    Registriert seit:
    24.09.2003
    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: 28.01.2007
Die Seite wird geladen...
Ähnliche Themen - crontab skript Forum Datum
Crontab zum Systemstart Mac OS X - Unix & Terminal 29.11.2012
/etc/crontab nicht vorhanden (?) Mac OS X - Unix & Terminal 29.10.2009
Little Snitch per Crontab Scheduler starten? Mac OS X - Unix & Terminal 06.09.2008
Crontab-Syntax auf Linux Mac OS X - Unix & Terminal 03.06.2006
Per Crontab Ditto zum automatischen Backup Konfigurieren Mac OS X - Unix & Terminal 20.09.2002

Diese Seite empfehlen

Benutzerdefinierte Suche