説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

tarsnap.sh 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/sh
  2. # Tarsnap backup script
  3. # Written by Tim Bishop, 2009.
  4. # Directories to backup
  5. DIRS="/home /root /decrypted /var/www /var/lib/mysql"
  6. # Number of daily backups to keep
  7. DAILY=7
  8. # Number of weekly backups to keep
  9. WEEKLY=3
  10. # Which day to do weekly backups on
  11. # 1-7, Monday = 1
  12. WEEKLY_DAY=5
  13. # Number of monthly backups to keep
  14. MONTHLY=1
  15. # Which day to do monthly backups on
  16. # 01-31 (leading 0 is important)
  17. MONTHLY_DAY=01
  18. # Path to tarsnap
  19. #TARSNAP="/home/tdb/tarsnap/tarsnap.pl"
  20. TARSNAP="/usr/local/bin/tarsnap"
  21. # end of config
  22. # day of week: 1-7, monday = 1
  23. DOW=`date +%u`
  24. # day of month: 01-31
  25. DOM=`date +%d`
  26. # month of year: 01-12
  27. MOY=`date +%m`
  28. # year
  29. YEAR=`date +%Y`
  30. # time
  31. TIME=`date +%H%M%S`
  32. # Backup name
  33. if [ X"$DOM" = X"$MONTHLY_DAY" ]; then
  34. # monthly backup
  35. BACKUP="$YEAR$MOY$DOM-$TIME-monthly"
  36. elif [ X"$DOW" = X"$WEEKLY_DAY" ]; then
  37. # weekly backup
  38. BACKUP="$YEAR$MOY$DOM-$TIME-weekly"
  39. else
  40. # daily backup
  41. BACKUP="$YEAR$MOY$DOM-$TIME-daily"
  42. fi
  43. # Do backups
  44. for dir in $DIRS; do
  45. # nasty bodge for my large /home :-)
  46. EXTRA_FLAGS=
  47. if [ X"$dir" = X"/home" ]; then
  48. EXTRA_FLAGS="--lowmem"
  49. fi
  50. echo "==> create $BACKUP-$dir"
  51. $TARSNAP $EXTRA_FLAGS -c -f $BACKUP-$dir $dir
  52. done
  53. # Backups done, time for cleaning up old archives
  54. # using tail to find archives to delete, but its
  55. # +n syntax is out by one from what we want to do
  56. # (also +0 == +1, so we're safe :-)
  57. DAILY=`expr $DAILY + 1`
  58. WEEKLY=`expr $WEEKLY + 1`
  59. MONTHLY=`expr $MONTHLY + 1`
  60. # Do deletes
  61. TMPFILE=/tmp/tarsnap.archives.$$
  62. $TARSNAP --list-archives > $TMPFILE
  63. for dir in $DIRS; do
  64. for i in `grep -E "^[[:digit:]]{8}-[[:digit:]]{6}-daily-$dir" $TMPFILE | sort -rn | tail -n +$DAILY`; do
  65. echo "==> delete $i"
  66. $TARSNAP -d -f $i
  67. done
  68. for i in `grep -E "^[[:digit:]]{8}-[[:digit:]]{6}-weekly-$dir" $TMPFILE | sort -rn | tail -n +$WEEKLY`; do
  69. echo "==> delete $i"
  70. $TARSNAP -d -f $i
  71. done
  72. for i in `grep -E "^[[:digit:]]{8}-[[:digit:]]{6}-monthly-$dir" $TMPFILE | sort -rn | tail -n +$MONTHLY`; do
  73. echo "==> delete $i"
  74. $TARSNAP -d -f $i
  75. done
  76. done
  77. rm $TMPFILE