backup-to-b2.sh.j2 4.8 KB

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