Website backup script via FTP (BASH script)
Het is raadzaam en handig om een (aantal) keer per week je website bestanden veilig te stellen door er een backup van te maken, zo kun je altijd je website herstellen mochter er bestanden beschadigd of zoek zijn geraakt, ik heb een script gemaakt, gebaseerd op het MySQL backup script.
Omdat er verder geen FTP client is geinstalleerd op een synology NAS (en apt-get / ipkg werken niet), maken we gebruik van WGET
Het script hieronder download via FTP de bestanden van een website, plaatst deze in een tijdelijke folder en pakt ze in een archief met GZIP (locatie is in te stellen) na de download, de tijdelijke bestanden worden daarna verwijderdt.
In het volgende voorbeeld behandelen we het script via een CRON-job op een Synology NAS.
Je hebt nodig: WinSCP en evt. een USB stick in de NAS
1) Gebruik WinSCP om in te loggen en maak de folder: volume1/cron en volume1/temp
2) Creeer een nieuw bestand en noem deze bijvoorbeeld: ftpbackup.sh, kopieer en plak daarin het script, wijzig de instellingen voor je eigen situatie en en sla het bestand op.
3) Op de NAS ga naar: Control Panel > Task Sheduler > Create > User-defined script > voor in: “sh /volume1/cron/ftpbackup.sh” en stel de tijden en dagen in.
Het script
update Juli 2019, hieronder een nieuwe versie
- Minder instellingen
- Controleren van aantal backups (oude bestanden) nu vereenvoudigd en werkt nu met dagen (ipv specifiek aantal)
- Download alleen gewijzigde bestanden (laat de FTP download staan)
- Archiveert nu met ZIP
1 2 3 4 5 6 7 8 9 10 11 12 13 |
KEEPBACKUPDAYS=5 WEBSITENAME=website.nl FTPADRES=ftp.website.nl FTPNAME=NAAM FTPPASS=WACHTWOORD FTPPATH=/webspace/httpdocs BACKUPLOCATION=/volume1/backup DATE=`date +%Y%m%d%H%M%S` find ${BACKUPLOCATION}/${WEBSITENAME}-ftp-*.zip -mtime +${KEEPBACKUPDAYS} -delete wget -r -N -l inf ftp://${FTPNAME}:${FTPPASS}@${FTPADRES}${FTPPATH} -P ${BACKUPLOCATION}/${WEBSITENAME} zip -r ${BACKUPLOCATION}/${WEBSITENAME}-ftp-${DATE}.zip ${BACKUPLOCATION}/${WEBSITENAME} exit 0 |
oude versie
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 |
#!/bin/bash ####################################################################### # # Website FTP backup script door Sebastiaan Ebeltjes / DomoticX.nl # # Gebruik van dit script is op eigen risico! # # Dit script is met een CRON-job te starten op een Synology NAS # Sla het bestand op als .sh bestand en ga dan naar: # # Control Panel > Task Sheduler > Create > User-defined script # Voorbeeld: sh /volume1/cron/ftpbackup.sh # # INFO: # # Aangeraden om de tijdelijke folder niet op de USB stick op te slaan! # # Pad naar USB stick (aangesloten op een Synology NAS): # /volumeUSB[N]/usbshare # ####################################################################### # [INSTELLINGEN] KEEPBACKUPS=5 WEBSITENAME=website.nl FTPADRES=ftp.website.nl FTPNAME=NAAM FTPPASS=WACHTWOORD FTPPATH=/webspace/httpdocs/ TEMPLOCATION=/volume1/temp STORELOCATION=/volumeUSB1/usbshare # [SCRIPT] BACKUPS=`find ${STORELOCATION} -name "${WEBSITENAME}-ftp-*.gz" | wc -l | sed 's/\ //g'` while [ $BACKUPS -ge $KEEP ] do ls -tr1 ${STORELOCATION}/${WEBSITENAME}-ftp-*.gz | head -n 1 | xargs rm -f BACKUPS=`expr $BACKUPS - 1` done DATE=`date +%Y%m%d%H%M%S` wget -r -l0 ftp://${FTPNAME}:${FTPPASS}@${FTPADRES}${FTPPATH} -P ${TEMPLOCATION}/${WEBSITENAME} tar -czf ${STORELOCATION}/${WEBSITENAME}-ftp-${DATE}.gz ${TEMPLOCATION}/${WEBSITENAME} rm -rf ${TEMPLOCATION}/${WEBSITENAME} ####################################################################### exit 0 |
Je kan de BASH ‘instellingen’ opnieuw toewijzen, je kan dan meerdere backups maken in 1 script, kopieer dan de instellingen en het script gedeelte binnen de ### opnieuw en plaats deze VOOR de ‘exit 0’ commando.
Let op!: Heb je een router met DDOS beveiliging, en staat deze aan?, stel deze iets ruimer in anders heb je kans dat je NAS wordt geblokkeerd door je router ivm met het aantal verbindingen per seconde.