eiru-backup.sh 1.4 KB

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