backup-to-b2.sh.j2 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #!/bin/bash
  2. # {{ ansible_managed }}
  3. LOG_FILE="/var/log/rclone/rclone-$(date +%Y-%m-%d).log"
  4. rm -f /opt/backups/*
  5. {% if backups is defined and 'containers' in backups %}
  6. {% if containers is defined %}
  7. {% for container in containers %}
  8. {% if container.volumes is defined %}
  9. {% for volume in container.volumes %}
  10. {% if volume|regex_replace(':.*') not in backups_ignore %}
  11. echo "Stopping '{{ container.name }}' service..." | ts >> "$LOG_FILE"
  12. systemctl stop {{ container.name }}
  13. echo "Service '{{ container.name }}' stopped." | ts >> "$LOG_FILE"
  14. echo "Starting backup of '{{ container.name }}:{{ volume | regex_replace(':.*') }}'." | ts >> "$LOG_FILE"
  15. tar -czf {{ backup_tmp_dir }}/$(date +%Y-%m-%d)_{{ ansible_hostname }}_{{ container.name}}_{{ volume | regex_replace(':.*') | basename }}.tar.gz {{ volume | regex_replace(':.*') }}/
  16. if [[ $? > 0 ]]; then
  17. curl \
  18. -H "Title: rclone backup error" \
  19. -H "Priority: urgent" \
  20. -H "Tags: warning" \
  21. -d "Backup of {{ container.name }}:{{ volume | regex_replace(':.*') }} on $(hostname) had an error. Please check logs at $LOG_FILE" \
  22. https://ntfy.warchildstory.com/{{ ntfy_server_notifications }}
  23. fi
  24. echo "Finished backup of '{{ container.name }}:{{ volume | regex_replace(':.*') }}'." | ts >> "$LOG_FILE"
  25. echo "Starting '{{ container.name }}' service..." | ts >> "$LOG_FILE"
  26. systemctl start {{ container.name }}
  27. echo "Service '{{ container.name }}' started." | ts >> "$LOG_FILE"
  28. {% endif %}
  29. {% endfor %}
  30. {% endif %}
  31. {% endfor %}
  32. echo "Backing up tarballs to B2..." | ts >> "$LOG_FILE"
  33. /usr/bin/rclone copy {{ backup_tmp_dir }} b2-container-data:{{ ansible_hostname }} \
  34. --fast-list \
  35. --log-file="$LOG_FILE" -v
  36. echo "Finished backing up tarballs to B2." | ts >> "$LOG_FILE"
  37. {% endif %}
  38. {% endif %}
  39. {% if ansible_hostname == 'tvheadend' %}
  40. ## Photos
  41. PHOTOS_LOG="/tmp/b2-photos.log"
  42. > $PHOTOS_LOG
  43. echo "Starting backup of photos..." | ts >> "$LOG_FILE"
  44. #/usr/bin/rclone copy /mnt/nas/private/Photos b2-photos:current --backup-dir=b2-photos:old --suffix=-$(date +%Y-%m-%d) --fast-list --suffix-keep-extension --exclude "*DS_Store" --log-file=$PHOTOS_LOG | ts | tee -a "$LOG_FILE"
  45. /usr/bin/rclone copy /mnt/nas/private/Photos b2-photos:current --fast-list --immutable --exclude "*DS_Store" --log-file=$PHOTOS_LOG -v | ts | tee -a "$LOG_FILE"
  46. if [[ $? > 0 ]]; then
  47. curl \
  48. -H "Title: rclone backup error" \
  49. -H "Priority: urgent" \
  50. -H "Tags: warning" \
  51. -d "Backup of Photos on $(hostname) had an error. Please check logs at $LOG_DIR/$(basename -- $PHOTOS_LOG)" \
  52. https://ntfy.warchildstory.com/{{ ntfy_server_notifications }}
  53. fi
  54. mv "$PHOTOS_LOG" "$LOG_DIR"
  55. echo "Finished backing up photos" | ts >> "$LOG_FILE"
  56. # Data
  57. DATA_LOG="/tmp/b2-data.log"
  58. > $DATA_LOG
  59. echo "Starting backup of data..." | ts >> "$LOG_FILE"
  60. /usr/bin/rclone copy /mnt/nas/private/Data b2-data:current --backup-dir=b2-data:old --suffix=-$(date +%Y-%m-%d) --fast-list --suffix-keep-extension --exclude "*DS_Store" --log-file=$DATA_LOG -v | ts | tee -a "$LOG_FILE"
  61. if [[ $? > 0 ]]; then
  62. curl \
  63. -H "Title: rclone backup error" \
  64. -H "Priority: urgent" \
  65. -H "Tags: warning" \
  66. -d "Backup of Data on $(hostname) had an error. Please check logs at $LOG_DIR/$(basename -- $DATA_LOG)" \
  67. https://ntfy.warchildstory.com/{{ ntfy_server_notifications }}
  68. fi
  69. mv "$DATA_LOG" "$LOG_DIR"
  70. echo "Finished backing up data" | ts >> "$LOG_FILE"
  71. # Music
  72. MUSIC_LOG="/tmp/b2-music.log"
  73. > $MUSIC_LOG
  74. echo "Starting backup of music..." | ts >> "$LOG_FILE"
  75. /usr/bin/rclone copy /mnt/nas/public b2-music:current --backup-dir=b2-music:old --suffix=-$(date +%Y-%m-%d) --fast-list --suffix-keep-extension --include=Music/** --include="Music Videos"/** --log-file=$MUSIC_LOG -v | ts | tee -a "$LOG_FILE"
  76. if [[ $? > 0 ]]; then
  77. curl \
  78. -H "Title: rclone backup error" \
  79. -H "Priority: urgent" \
  80. -H "Tags: warning" \
  81. -d "Backup of Music on $(hostname) had an error. Please check logs at $LOG_DIR/$(basename -- $MUSIC_LOG)" \
  82. https://ntfy.warchildstory.com/{{ ntfy_server_notifications }}
  83. fi
  84. mv "$MUSIC_LOG" "$LOG_DIR"
  85. echo "Finished backing up music" | ts >> "$LOG_FILE"
  86. # Recipes
  87. RECIPES_LOG="/tmp/b2-recipes.log"
  88. > $RECIPES_LOG
  89. echo "Starting backup of recipes..." | ts >> "$LOG_FILE"
  90. /usr/bin/rclone copy /mnt/nas/public b2-data:current --backup-dir=b2-data:old --suffix=-$(date +%Y-%m-%d) --fast-list --suffix-keep-extension --include=Recipes/** --log-file=$RECIPES_LOG -v | ts | tee -a "$LOG_FILE"
  91. if [[ $? > 0 ]]; then
  92. curl \
  93. -H "Title: rclone backup error" \
  94. -H "Priority: urgent" \
  95. -H "Tags: warning" \
  96. -d "Backup of Recipes on $(hostname) had an error. Please check logs at $LOG_DIR/$(basename -- $RECIPES_LOG)" \
  97. https://ntfy.warchildstory.com/{{ ntfy_server_notifications }}
  98. fi
  99. mv "$RECIPES_LOG" "$LOG_DIR"
  100. echo "Finished backing up recipes" | ts >> "$LOG_FILE"
  101. {% endif %}