From f7117da82f1e493bdc1b2d583056526426788706 Mon Sep 17 00:00:00 2001 From: DecaTec Date: Sun, 17 Sep 2017 18:16:30 +0200 Subject: [PATCH] The number of backups can be specified, older backups are deleted automatically --- NextcloudBackup.sh | 34 ++++++++++++++++++++++++++++++++++ NextcloudRestore.sh | 19 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/NextcloudBackup.sh b/NextcloudBackup.sh index ace78d8..469d9d1 100644 --- a/NextcloudBackup.sh +++ b/NextcloudBackup.sh @@ -32,6 +32,8 @@ dbUser="nextcloud_db_user" dbPassword="mYpAsSw0rd" # TODO: Your webserver user webserverUser="www-data" +# TODO: The maximum number of backups to keep (when set to 0, all backups are kept) +maxNrOfBackups=0 # File names for backup files # If you prefer other file names, you'll also have to change the NextcloudRestore.sh script. @@ -70,6 +72,7 @@ cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:mode --on cd ~ echo "Done" +echo # # Stop webserver @@ -77,6 +80,7 @@ echo "Done" echo "Stopping nginx..." service nginx stop echo "Done" +echo # # Backup file and data directory @@ -84,9 +88,12 @@ echo "Done" echo "Creating backup of Nextcloud file directory..." tar -cpzf "${backupdir}/${fileNameBackupFileDir}" -C "${nextcloudFileDir}" . echo "Done" +echo + echo "Creating backup of Nextcloud data directory..." tar -cpzf "${backupdir}/${fileNameBackupDataDir}" -C "${nextcloudDataDir}" . echo "Done" +echo # # Backup DB @@ -94,18 +101,45 @@ echo "Done" echo "Backup Nextcloud database..." mysqldump --single-transaction -h localhost -u "${dbUser}" -p"${dbPassword}" "${nextcloudDatabase}" > "${backupdir}/${fileNameBackupDb}" echo "Done" +echo # # Start webserver # +echo "Starting webserver..." service nginx start +echo "Done" +echo # # Disable maintenance mode # +echo "Switching off maintenance mode..." cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:mode --off cd ~ +echo "Done" +echo + +# +# Delete old backups +# +if [ ${maxNrOfBackups} != 0 ] +then + nrOfBackups=$(ls -l ${backupMainDir} | grep -c ^d) + + if [ ${maxNrOfBackups} > ${nrOfBackups}} ] + then + echo "Removing old backups..." + ls -t ${backupMainDir} | tail -$(( nrOfBackups - maxNrOfBackups )) | while read dirToRemove; do + echo "${dirToRemove}" + rm -r ${backupMainDir}/${dirToRemove} + echo "Done" + echo + done + fi +fi +echo echo "DONE!" echo "Backup created: ${backupdir}" diff --git a/NextcloudRestore.sh b/NextcloudRestore.sh index 78b624b..200ff5f 100644 --- a/NextcloudRestore.sh +++ b/NextcloudRestore.sh @@ -77,6 +77,7 @@ cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:mode --on cd ~ echo "Done" +echo # # Stop webserver @@ -84,6 +85,7 @@ echo "Done" echo "Stopping nginx..." service nginx stop echo "Done" +echo # # Delete old Nextcloud direcories @@ -92,10 +94,13 @@ echo "Deleting old Nextcloud file directory..." rm -r "${nextcloudFileDir}" mkdir -p "${nextcloudFileDir}" echo "Done" +echo + echo "Deleting old Nextcloud data directory..." rm -r "${nextcloudDataDir}" mkdir -p "${nextcloudDataDir}" echo "Done" +echo # # Restore file and data directory @@ -103,9 +108,12 @@ echo "Done" echo "Restoring Nextcloud file directory..." tar -xpzf "${currentRestoreDir}/${fileNameBackupFileDir}" -C "${nextcloudFileDir}" echo "Done" +echo + echo "Restoring Nextcloud data directory..." tar -xpzf "${currentRestoreDir}/${fileNameBackupDataDir}" -C "${nextcloudDataDir}" echo "Done" +echo # # Restore database @@ -113,12 +121,17 @@ echo "Done" echo "Dropping old Nextcloud DB..." mysql -h localhost -u "${dbUser}" -p"${dbPassword}" -e "DROP DATABASE ${nextcloudDatabase}" echo "Done" +echo + echo "Creating new DB for Nextcloud..." mysql -h localhost -u "${dbUser}" -p"${dbPassword}" -e "CREATE DATABASE ${nextcloudDatabase}" echo "Done" +echo + echo "Restoring backup DB..." mysql -h localhost -u "${dbUser}" -p"${dbPassword}" "${nextcloudDatabase}" < "${currentRestoreDir}/${fileNameBackupDb}" echo "Done" +echo # # Start webserver @@ -126,6 +139,7 @@ echo "Done" echo "Starting nginx..." service nginx start echo "Done" +echo # # Set directory permissions @@ -134,6 +148,7 @@ echo "Setting directory permissions..." chown -R "${webserverUser}" "${nextcloudFileDir}" chown -R "${webserverUser}" "${nextcloudDataDir}" echo "Done" +echo # # Update the system data-fingerprint (see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/occ_command.html#maintenance-commands-label) @@ -143,6 +158,7 @@ cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:data-fingerprint cd ~ echo "Done" +echo # @@ -161,6 +177,7 @@ chown root:"${webserverUser}" "${nextcloudDataDir}/.htaccess" chmod 0644 "${nextcloudFileDir}/.htaccess" chmod 0644 "${nextcloudDataDir}/.htaccess" echo "Done" +echo # # Disbale maintenance mode @@ -170,6 +187,8 @@ cd "${nextcloudFileDir}" sudo -u "${webserverUser}" php occ maintenance:mode --off cd ~ echo "Done" +echo +echo echo "DONE!" echo "Backup ${restore} successfully restored." -- 2.34.1