====== Clone Data Script ======
This script automates the process of backing up files from a remote server to a local directory. It uses **rsync** over SSH to ensure that the local backup directory is synchronized with the remote directory. The script includes logging capabilities and retry mechanisms in case of connection issues.
==== Environment Variables ====
* **BACKUPS_HOST**: The hostname or IP address of the backup server (e.g., **backup.elosys.net**).
* **BACKUP_DIR**: The local directory where backups will be stored (e.g., /home/amine/backups).
* **LOGFILE**: The file where logs will be stored (default: $BACKUP_DIR/out.log).
==== Script Explanation ====
=== 1. Logging Setup ===
touch $LOGFILE
exec 2>&1
exec >> $LOGFILE
* Creates the log file if it doesn't exist.
* Redirects both stderr and stdout to the log file for comprehensive logging.
=== 2. Date Variable ===
DATE="date +\%Y-\%m-\%d\ \%H:\%M:\%S"
* Defines a variable DATE to format and print the current date and time.
=== 3. Start Log Entry ===
echo "["$(eval $DATE)"] Clone backup start"
* Logs the start time of the backup process.
=== 4. Checking Remote Backups Availability ===
while ! ssh -p 2224 $BACKUPS_HOST stat /upload/*.* \> /dev/null ;
do
echo "["$(eval $DATE)"] Cannot contact backup server. Retrying in 1mn"
sleep 30
done
sleep 2
* Uses a while loop to repeatedly check if backups exist on the remote server.
* If the server is not reachable, logs a message and retries after 30 seconds.
* Introduces a short delay after the server becomes reachable.
=== 5. Synchronizing Backup ===
rsync -ahvz -H --delete --exclude='out.log' --exclude=".*" --exclude='anonymization' -e 'ssh -p 2224' $BACKUPS_HOST:/upload/ $BACKUP_DIR
* Uses rsync to synchronize the remote backup directory (/upload/) with the local backup directory ($BACKUP_DIR).
* Options used:
* **-a** : Archive mode, which preserves permissions and other attributes.
* **-h** : Human-readable output.
* **-v** : Verbose mode.
* **-z** : Compression during transfer.
* **-H** : Preserve hard links.
* **--delete**: Delete files in the local directory that are not in the remote directory.
* **--exclude**: Exclude certain files or directories from being copied.
* **-e 'ssh -p 2224'**: Use SSH with a specified port for the connection.
=== 6. Cleanup ===
rm $BACKUP_DIR/output.log
* Removes the output.log file from the local backup directory.
=== 7. Completion Log Entry ===
echo "["$(eval $DATE)"] Done"
* Logs the completion time of the backup process.
----
--- //[[nadirhabib96@gmail.com|Nadir Habib]] 2024/06/05 14:53//