Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision |
computing:rsyncrsnapshot [2023/04/10 21:03] – oemb1905 | computing:rsyncrsnapshot [2023/04/10 21:16] – oemb1905 |
---|
mail -s "[$(hostname -f)]-rsnap-success-$(date)" alerts@alerts.com < $logfile | mail -s "[$(hostname -f)]-rsnap-success-$(date)" alerts@alerts.com < $logfile |
rm $logfile | rm $logfile |
chown sexa:sexa -R /mnt/backups/rsnapback/localhost.domain/ | chown user:user -R /mnt/backups/rsnapback/localhost.domain/ |
chmod 770 -R /mnt/backups/rsnapback/localhost.domain/ | chmod 770 -R /mnt/backups/rsnapback/localhost.domain/ |
else | else |
rm $logfile | rm $logfile |
fi | fi |
| |
| Then, in ''/etc/cron.d/rsnapshot'', I set up a cronjob to run this script on a schedule. For my particular use case, twice a day is sufficient, but this can obviously be adjusted to the user's needs: |
| |
| 0 0,14 * * * root /bin/bash /usr/local/bin/rsnap-alpha-netback.jonathanhaack.com.sh > /dev/null 2>&1 |
| |
| Now that the localhost/backup server is backing up it's own essential boot volume files to the backup zpool, it's time to create the configs and scripts for the remote hosts. In my case, I have over 15 remote hosts set up this way, so I will highlight the setup for one in order to demonstrate what I've done. First, create a directory for the configs such as ''/etc/rsnapshot/'' and then create a config file within it such as ''/etc/rsnapshot/rsnapshot-domain.com.conf''. The config for the remote host looks very similar to the localhost config, but it has syntax for connecting to the remote host. Of course, make sure that you have properly exchanged ssh keys and installed rsync on the remote host before proceeding: |
| |
| #base config |
| config_version 1.2 |
| snapshot_root /mnt/backups/rsnapback/domain.com/ |
| cmd_cp /bin/cp |
| cmd_rm /bin/rm |
| cmd_rsync /usr/bin/rsync |
| cmd_ssh /usr/bin/ssh |
| cmd_logger /usr/bin/logger |
| verbose 2 |
| loglevel 3 |
| logfile /var/log/rsnapshot.log |
| sync_first 1 |
| use_lazy_deletes 1 |
| retain alpha 90 |
| #directories |
| backup root@domain.com:/etc/ etc/ |
| backup root@domain.com:/usr/local/bin/ bin/ |
| backup root@domain.com:/var/www/ www/ |
| backup root@domain.com:/home/ home/ |
| backup root@domain.com:/root/ root/ |
| |
| Now that the config is setup, you use a script very similar to the localhost script above, but note the syntax changes for sync and alpha that will specify to rsnapshot to use this particular configuration file. Additionally, just like the localhost, I specified for rsnapshot to retain a snapshot called alpha for 90 days, which suits my use case. Here's the script for the remote hosts: |
| |
| #!/bin/bash |
| service="/usr/bin/rsnapshot" |
| logfile="/home/sexa/logs/domain.com.log" |
| host="domain.com" |
| START1="$(date +%s)" |
| touch $logfile |
| $service -c /etc/rsnapshot/rsnapshot-$host.conf -V sync > $logfile |
| END1="$(date +%s)" |
| DURATION1=$[ ${END1} - ${START1} ] |
| MINUTES=$[ ${DURATION1} / 60 ] |
| sed -i "1s/^/Jonathan, at $(date), the rsnapshot sync took exactly ${DURATION1} seconds which is approximately ${MINUTES} minutes to complete.\n/" $logfile |
| if |
| tail -n -5 $logfile | grep "completed" |
| then |
| START1="$(date +%s)" |
| echo "Jonathan, at $(date), $(hostname -f) ran a sync that completed so I am now running alpha." |
| $service -c /etc/rsnapshot/rsnapshot-$host.conf -V alpha >> $logfile |
| END1="$(date +%s)" |
| DURATION1=$[ ${END1} - ${START1} ] |
| MINUTES=$[ ${DURATION1} / 60 ] |
| sed -i "1s/^/Jonathan, at $(date), the rsnapshot alpha took exactly ${DURATION1} seconds which is approximately ${MINUTES} minutes to complete.\n/" $logfile |
| #echo "Jonathan, at $(date), the rsnapshot alpha took exactly ${DURATION1} seconds which is approximately ${MINUTES} minutes to complete." | tee -a $logfile |
| mail -s "[${host}]-rsnap-success-$(date)" alerts@alerts.com < $logfile |
| rm $logfile |
| chown user:user -R /mnt/backups/rsnapback/$host/ |
| chmod 770 -R /mnt/backups/rsnapback/$host/ |
| else |
| echo "Jonathan, at $(date), $(hostname -f) ran a sync that failed and I am now notifying you." |
| mail -s "[${host}]-rsnap-failure-$(date)" alerts@alerts.com < $logfile |
| rm $logfile |
| fi |
| |
| |
| |
| |
| |