#!/bin/bash # Run this script with "(sudo) bash ". # # 0 2 * * * bash /root/nextcloud-sync.sh | tee /var/log/nextcloud.log > /dev/null 2>&1 # Exit on error. #set -eux # debug on set -e # Timestamp DATE_STAMP=$(date '+%s') ############ REMOTE # Host must have SSH keys setup. # Must have access to the below paths & access to the database. SSH_REMOTE_HOST='host' SSH_REMOTE_USER='root' # The user to run the _REMOTE_ nextcloud install uses. # For running commands etc. NEXTCLOUD_REMOTE_USER='nextcloud' NEXTCLOUD_REMOTE_DATABASE_NAME='nextcloud' # Paths. PHP_REMOTE_BIN='php' NEXTCLOUD_REMOTE_FILE_DATA='/nextcloud/data' NEXTCLOUD_REMOTE_FILE_ROOT='/var/www/nextcloud/htdocs' REMOTE_NC_MAINTENANCE_ON="ssh $SSH_REMOTE_USER@$SSH_REMOTE_HOST sudo -u $NEXTCLOUD_REMOTE_USER $PHP_REMOTE_BIN $NEXTCLOUD_REMOTE_FILE_ROOT/occ maintenance:mode --on" REMOTE_NC_MAINTENANCE_OFF="ssh $SSH_REMOTE_USER@$SSH_REMOTE_HOST sudo -u $NEXTCLOUD_REMOTE_USER $PHP_REMOTE_BIN $NEXTCLOUD_REMOTE_FILE_ROOT/occ maintenance:mode --off" REMOTE_DB_CREATE_DUMP="ssh $SSH_REMOTE_USER@$SSH_REMOTE_HOST mysqldump --single-transaction $NEXTCLOUD_REMOTE_DATABASE_NAME > /tmp/nextcloud-$DATE_STAMP.sql" ############ LOCAL NEXTCLOUD_USER='nextcloud' NEXTCLOUD_DATABASE_NAME='nextcloud' # Paths. PHP_BIN='php' NEXTCLOUD_FILE_DATA='/nextcloud/data' NEXTCLOUD_FILE_ROOT='/var/www/nextcloud/htdocs' NC_MAINTENANCE_ON="sudo -u $NEXTCLOUD_USER $PHP_BIN $NEXTCLOUD_FILE_ROOT/occ maintenance:mode --on" NC_MAINTENANCE_OFF="sudo -u $NEXTCLOUD_USER $PHP_BIN $NEXTCLOUD_FILE_ROOT/occ maintenance:mode --off" GET_DB_DUMP_FROM_REMOTE="rsync --progress -Aavx $SSH_REMOTE_USER@$SSH_REMOTE_HOST:/tmp/nextcloud-$DATE_STAMP.sql /tmp/nextcloud-$DATE_STAMP.sql" GET_DATA_FILES_FROM_REMOTE="rsync --progress -Aavx $SSH_REMOTE_USER@$SSH_REMOTE_HOST:$NEXTCLOUD_REMOTE_FILE_DATA/. $NEXTCLOUD_FILE_DATA" GET_NC_FILES_FROM_REMOTE="rsync --progress -Aavx $SSH_REMOTE_USER@$SSH_REMOTE_HOST:$NEXTCLOUD_REMOTE_FILE_ROOT/. $NEXTCLOUD_FILE_ROOT" ######### # Enable remote MAINTENANCE mode. ${REMOTE_NC_MAINTENANCE_ON} # Make remote dump. ${REMOTE_DB_CREATE_DUMP} # Enable local MAINTENANCE mode. ${NC_MAINTENANCE_ON} # Sync nc files. ${GET_NC_FILES_FROM_REMOTE} # Sync files. ${GET_DATA_FILES_FROM_REMOTE} # Get database dump. ${GET_DB_DUMP_FROM_REMOTE} # Disable remote MAINTENANCE mode. ${REMOTE_NC_MAINTENANCE_OFF} # Restore database dump. # You can't script this due to the redirection. mysql $NEXTCLOUD_DATABASE_NAME < /tmp/nextcloud-$DATE_STAMP.sql && rm /tmp/nextcloud-$DATE_STAMP.sql # Disable local MAINTENANCE mode. ${NC_MAINTENANCE_OFF} echo "$DATE_STAMP OK" >> /var/log/nc-sync.log