Guest User

Untitled

a guest
Mar 13th, 2019
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # Script purpose:
  4. # Copy FileMaker backups to remote FTP server for backups.
  5. # Rotate remote copies of backups on FTP server.
  6.  
  7. # Written by William Smith, 318, Inc.
  8. # August 26, 2015
  9.  
  10. # Notes:
  11. # This script executes when called by the com.318.FTPFileMakerBackups.plist launch daemon
  12. # in /Library/LaunchDaemons. Log files are located in /Library/Logs
  13.  
  14.  
  15.  
  16. ##### Definitions
  17.  
  18. scriptname=$( /usr/bin/basename -s .sh "$0" )
  19. filemakerbackupfolder="/Library/FileMaker Server/Data/Backups"
  20. ftpaddress="192.168.5.250"
  21. ftpusername="ftpadmin"
  22. ftpuserpassword="p@55w0rd"
  23. workingfolder="/private/tmp/fmpftpfiles"
  24. logfolder="/Library/Logs/$scriptname"
  25. logfile="$logfolder/$scriptname - $( /bin/date '+%Y-%m-%d' ).log"
  26.  
  27.  
  28.  
  29. ###### Functions
  30.  
  31.  
  32. function logresult() {
  33. if [ $? = 0 ] ; then
  34. /bin/date "+%Y-%m-%d %H:%M:%S $1" >> "$logfile"
  35. else
  36. /bin/date "+%Y-%m-%d %H:%M:%S $2" >> "$logfile"
  37. fi
  38. }
  39.  
  40.  
  41.  
  42. ###### Logging
  43.  
  44.  
  45. # start the log
  46. mkdir -p "$logfolder"
  47.  
  48. logresult "--------------------- Begin Script ---------------------"
  49.  
  50. # rotate logs -- delete all but the 14 most recent log files
  51. deleteoldlogs=$( /bin/ls -1t "$logfolder/$scriptname"*.log | /usr/bin/tail -n +15 )
  52.  
  53. while IFS= read -r afile
  54. do
  55. logfilename=$( /usr/bin/basename "$afile" )
  56. /bin/rm "$afile"
  57. logresult "Deleting old log file: $logfilename." "No old logs to delete."
  58. done <<< "$deleteoldlogs"
  59.  
  60.  
  61.  
  62. ##### Create list of local FileMaker Server backup folders.
  63.  
  64. locallist=$( ls "$filemakerbackupfolder" )
  65.  
  66.  
  67.  
  68. ##### Create list of remote backup files.
  69.  
  70. remotelist=$( curl -l ftp://$ftpaddress/ --user "$ftpusername:$ftpuserpassword" )
  71.  
  72. # create temporary working directory
  73. mkdir -p "$workingfolder"
  74. logresult "SUCCESS: Created temporary working directory: $workingfolder" "ERROR: Unable to create temporary working directory: $workingfolder"
  75.  
  76.  
  77.  
  78. ##### Compare local list with remote list and
  79. ##### create archive of each local FileMaker backup not in the FTP server list.
  80.  
  81. echo "$locallist" | while IFS= read -r afile
  82. do
  83. if [[ $remotelist != *"$afile"* ]] ; then
  84. zip -r "$workingfolder/$afile.zip" "$filemakerbackupfolder/$afile"
  85. logresult "SUCCESS: Created archive \"$afile.zip\"" "ERROR: Unable to create archive \"$afile.zip\""
  86. fi
  87. done
  88.  
  89.  
  90.  
  91. ##### Copy archives to FTP server.
  92.  
  93. ftp -inv $ftpaddress << End-Of-Session
  94. user $ftpusername $ftpuserpassword
  95. binary
  96. lcd $workingfolder
  97. mput *
  98. bye
  99. End-Of-Session
  100.  
  101. logresult "SUCCESS: Transferred new archive files to FTP server $ftpaddress" "ERROR: Unable to transfer new archive files to FTP server $ftpaddress"
  102.  
  103.  
  104.  
  105. ##### Remove remote backups not on local server.
  106.  
  107. echo "$remotelist" | while IFS= read -r afile
  108. do
  109. afilename=$( echo ${afile%.*} )
  110. if [[ "$locallist" != *"$afilename"* ]] ; then
  111. curl -v -u "$ftpusername:$ftpuserpassword" "ftp://$ftpaddress" -Q "DELE $afile"
  112. logresult "SUCCESS: Deleted remote file \"$afile\"" "ERROR: Unable to delete remote file \"$afile\""
  113. fi
  114. done
  115.  
  116.  
  117.  
  118. ##### Clean up
  119.  
  120. # delete temporary working directory and contents
  121. rm -R "$workingfolder"
  122. logresult "SUCCESS: Deleted temporary working directory: $workingfolder" "ERROR: Unable to delete temporary working directory: $workingfolder"
  123. echo "" >> $logfile
  124.  
  125. exit 0
Add Comment
Please, Sign In to add comment