eiru-backup.sh 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/bin/bash
  2. CONTAINER="database"
  3. DB_USER="odoo"
  4. DATE=$(date +%Y%m%d)
  5. DAYS_TO_KEEP=15
  6. BKP_PATH="/mnt/backup/primary_local_bkp/pg"
  7. SYNC_PATH="/mnt/backup/secondary_local_bkp/pg"
  8. TMP_PATH="."
  9. # perform database backup if docker exist
  10. perform_backups()
  11. {
  12. local BKP_TODAY_PATH=$(printf "%s/backup_%s" "$BKP_PATH" "$DATE")
  13. if [ ! -d "$BKP_TODAY_PATH" ]; then
  14. mkdir "$BKP_TODAY_PATH"
  15. fi
  16. for DB_NAME in $@; do
  17. local TMP_FILE=$(printf "%s/%s.tar" "$TMP_PATH" "$DB_NAME")
  18. docker exec $CONTAINER pg_dump -U $DB_USER -d $DB_NAME -F tar -C -b -c -f $TMP_FILE
  19. docker cp $CONTAINER:$TMP_FILE $BKP_TODAY_PATH
  20. docker exec $CONTAINER rm $TMP_FILE
  21. done
  22. }
  23. # delete old backups
  24. delete_old_backups()
  25. {
  26. find $1 -maxdepth 1 -type d -name "backup_*" -mtime +$2 -exec rm -rf '{}' ';'
  27. }
  28. # sync two backup paths
  29. sync_local_backups_path()
  30. {
  31. rsync -arz $1 $2
  32. }
  33. # sync two backup paths remotely
  34. remote_sync_backups_path()
  35. {
  36. rsync -arz "ssh -p $1" "$2@$3:$4" $5
  37. }
  38. if [ ! -x "$(command -v docker)" ]; then
  39. echo "cannot perform backup"
  40. exit 1
  41. fi
  42. perform_backups $@
  43. delete_old_backups $BKP_PATH $DAYS_TO_KEEP
  44. if [ ! -x "$(command -v rsync)" ]; then
  45. echo "cannot sync backups path"
  46. exit 1
  47. fi
  48. sync_local_backups_path "$BKP_PATH/" $SYNC_PATH
  49. exit 0