Eerder heb ik geschreven over mijn backup script. Deze zou ik nog aanpassen zodat het niet faalt als er een inputfile mist omdat er bijvoorbeeld geen SQL actief zou zijn. Hierbij dus de iteratie en daarmee het volledige script.
Met een paar simpele ‘if, else’ blokken is het uitgebreid en werkt het zonder problemen. Bij totaal geen input files word er niets gedaan dan enkel een log entry, dat er geen werk is.
Ook een $var bijgevoegd “basefolder” puur voor de handigheid.
#!/bin/bash # # Backup script for the daily and weekly copys # Files to fill: # to_backup Normal files, webcontent, configuration dirs. Note: no wildcards like '*' # to_backup_sql SQL databases. Enter only the database name # # 16-06-2013: created by bartjan@pc-mania.nl # 03-09-2016: re-done script (simplified, improved, universal, use of input files) # 13-10-2016: checks made if input files exist # Variables to work with if [[ "$(date +%a)" != "Sun" ]]; then btype="daily" else btype="weekly" fi servername="$(hostname -s)" log="/var/log/backuplog" destination="vrieskist:/share/Backups/$servername/$btype" basefolder="/root/scripts" printf "\n========== $btype backup started at $(date) ==========\n" >> $log # Do the backup of files, if any if [[ -f $basefolder/to_backup ]]; then while read line do data="$data $line" done < $basefolder/to_backup printf "\nCopying Webcontent and Webserver configuration files...\n\n" >> $log rsync -avphR --delete --log-file="$log" $data $destination else nofiles=true fi # Do the backup of databases, if any if [[ -f $basefolder/to_backup_sql ]]; then printf "\nMaking the MySQL dumps...\n" >> $log if [ ! -d "/tmp/mysqlbackup_tmp" ]; then mkdir /tmp/mysqlbackup_tmp fi while read line do mysqldump --defaults-extra-file=/root/.my.cnf $line > /tmp/mysqlbackup_tmp/$line.sql done < $basefolder/to_backup_sql printf "\nCopying Databases and MySQL configuration...\n" >> $log rsync -avph --delete --log-file="$log" /tmp/mysqlbackup_tmp/* $destination/mysql/ printf "\nCleanup after SQL backup...\n" >> $log rm -rf /tmp/mysqlbackup_tmp else nosql=true fi if [[ ! -z $nofiles && $nosql ]]; then printf "\nNothing to backup apparently...\n\n" >> $log else printf "\nAll done!\n\n" >> $log fi