Hoe staat het met dit script? Werkt dit naar behoren inmiddels?quote:sandergar schreef op zondag 05 oktober 2008 @ 18:44:
Op basis van deze howto en dit Linux script heb ik getracht een Rsync scriptje te bouwen waarmee gemaakte backups na verloop van tijd automatisch worden opgeruimd. Dit Linux script zou hetvolgende moeten doen:Het script heb ik opgeslagen met UltraEdit in Unix formaat (ben geen VI held) en vervolgens executable gemaakt. Als ik het script run dan krijg ik de volgende melding:
- Elke dag wordt die van een week geleden gewist.
- Elke zaterdag wordt nummer 5 gecopieerd naar de weekomgeving. Die van een maand geleden wordt dan gewist.
- Elke 4 weken wordt die van zaterdag bovendien naar de maandomgeving gecopieerd. Die van een jaar geleden wordt dan gewist.
/ffp/bin/snapshot.sh: 34: Syntax error: "(" unexpected
Nu heb ik een heel klein beetje Linux kennis maar na een uurtje Googlen ben ik er nog uit. Ik lees iets over het gebruik van een andere shell?!? Het originele Linux script werkt tenslotte met Bash ipv Sh. Gaat dit script uberhaupt werken op de CH3SNAS? Wie kan mij vertellen wat ik moet veranderen om dit script werkend te krijgen?
Mijn huidige snapshot.sh:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80#!/bin/sh # Dit script maakt dagelijks een backup van de CH3SNAS # Elke dag wordt een dagcopie gemaakt middels rsync. # rsync -a -v --delete --link-dest=OUDE_BACKUP /DIR/ NIEUWE_BACKUP/ # De kopie van de voorgaande week wordt verwijderd. # Eens per week is de dagbackup tevens de weekbackup. # Die wordt na 4 weken verwijderd # Eens per 4 weken is de backup tevens maandbackup # Die wordt na 1 jaar verwijderd # Set Source Path SRCPATH='/mnt/HD_a2/Data /mnt/HD_a2/Videobewerking' # Set the Destination Path DSTPATH=/mnt/HD_b2/Backup_NAS # Set path to Fun_Plug files # Fun_Plug 3.0 or 4.0 # ffppath=/mnt/HD_a2/fun_plug.d # Fun_Plug 5.0 FFPPATH=/ffp # Set Rsync RSYNC=$FFPPATH/bin/rsync # date --help zegt # %w day of week (0..6); 0 represents Sunday # %V week number of year with Monday as first day of week (01..53) BACKUPDATE=`date +'%w %V'` WEEKDAY=`echo $BACKUPDATE|cut -f 1 -d ' '` YESTERDAY=$[ ($WEEKDAY+6) % 7 ] WEEKNUMBER=`echo $BACKUPDATE|cut -f 2 -d ' '` # WEEKNUMBER, zoals date die geeft, bestaat altijd uit 2 cijfers # de voorloop-nul, zoals in 08, zorgt dat WEEKNUMBER octaal # geinterpreteerd wordt en dan moppert die dat dat niet kan :( WEEKNUMBER=$[10#$WEEKNUMBER] LASTMONTH=$[ (53+$WEEKNUMBER-4) % 53 ] BACKUPDIR=/$DSTPATH/daily/$WEEKDAY LINKDIR=/$DSTPATH/daily/$YESTERDAY WEEKBACKUP=/$DSTPATH/weekly/$WEEKNUMBER LASTMONTH=/$DSTPATH/weekly/$LASTMONTH MONTHBACKUP=/$DSTPATH/monthly/$WEEKNUMBER mkdir -p /$DSTPATH/daily/ mkdir -p /$DSTPATH/weekly/ mkdir -p /$DSTPATH/monthly/ date >> $BACKUPDIR.list if [ -z `find $BACKUPDIR -maxdepth 0 -ctime -1 ` ] then # eerste aanroep van vandaag, de oude informatie wissen rm -rf $BACKUPDIR $RSYNC -v -x -a --dry-run --delete --link-dest=$LINKDIR $SRCPATH $BACKUPDIR/ \ >> $BACKUPDIR.list else # reeds eerder een aaroep geweest vadaag, voeg de nieuwe informatie toe $RSYNC -v -x -a --dry-run --delete --link-dest=$LINKDIR $SRCPATH $BACKUPDIR/ >> $BACKUPDIR.list fi date >> $BACKUPDIR.list touch $BACKUPDIR if [ $WEEKDAY -eq 5 ] then rm -rf $LASTMONTH rm -rf $LASTMONTH.list cp -al $BACKUPDIR $WEEKBACKUP cp -af $BACKUPDIR.list $WEEKBACKUP.list if [ $[ $WEEKNUMBER % 4 ] -eq 0 ] then rm -rf $MONTHBACKUP rm -rf $MONTHBACKUP.list cp -al $BACKUPDIR $MONTHBACKUP cp -af $BACKUPDIR.list $MONTHBACKUP.list fi fi
Nadat regel 34 even offline is gehaald geeft regel 40 ook hetzelfde probleem aan. Mogen er met !/bin/sh geen haakjes toegepast worden?
Het originele snapshot.sh script uit de Howto werkt probleemloos.
Edit 9 oktober: problemen zijn verholpen dankzij de goede hulp van Ardezo, de maker van het originele script. De Bourne shell werkt iets anders dan de Bash shell.
Dit zijn de wijzigingen:
code:
1 2 3 4 5 6 7 8 9 # Set date variables WEEKDAY=`date +'%w` YESTERDAY=`expr \( $WEEKDAY + 6 \) % 7` WEEKNUMBER=`date +'%V'` # Convert the string to a number WEEKNUMBER=`expr \( $WEEKNUMBER + 0 \)` LASTMONTH=`expr \( 53 + $WEEKNUMBER - 4 \) % 53` if [ -z `find $BACKUPDIR -maxdepth 0 -mtime -1 ` ]
En wat is nu de file die je gebruikt? Want je zegt wel dat er iets gewijzigd is, maar als ik de genoemde wijzigingen verwerk krijg ik de volgende error:
expr: syntax error
Waarna er niets meer gebeurt en ik het proces moet killen, waarna ik het volgende bericht krijg:
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(541) [sender=3.0.3]
sh: 5: unknown operand
Ik kan hier echter niets mee, zou jeje werkende script nog een keer kunnen posten?
Betse wijzigde dit bericht 19-01-2009 22:15 (4%)
And the waning, northern summer light, reflecting in the freckle of your right eye.

