Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- ######################
- ### Upload Script ####
- ######################
- ### Version 0.95.5 ###
- ######################
- ####### EDIT ONLY THESE SETTINGS #######
- # INSTRUCTIONS
- # 1. Edit the settings below to match your setup
- # 2. NOTE: enter RcloneRemoteName WITHOUT ':'
- # 3. Optional: Add additional commands or filters
- # 4. Optional: Use bind mount settings for potential traffic shaping/monitoring
- # 5. Optional: Use service accounts in your upload remote
- # 6. Optional: Use backup directory for rclone sync jobs
- # REQUIRED SETTINGS
- RcloneCommand="copy" # choose your rclone command e.g. move, copy, sync
- RcloneRemoteName="gdrive_crypt" # Name of rclone remote mount WITHOUT ':'.
- RcloneUploadRemoteName="gdrive_crypt" # If you have a second remote created for uploads put it here. Otherwise use the same remote as RcloneRemoteName.
- LocalFilesShare="/mnt/user/mount_rclone" # location of the local files without trailing slash you want to rclone to use
- RcloneMountShare="/mnt/user/mount_rclone" # where your rclone mount is located without trailing slash e.g. /mnt/user/mount_rclone
- MinimumAge="0m" # sync files suffix ms|s|m|h|d|w|M|y
- ModSort="ascending" # "ascending" oldest files first, "descending" newest files first
- # Note: Again - remember to NOT use ':' in your remote name above
- # Bandwidth limits: specify the desired bandwidth in kBytes/s, or use a suffix b|k|M|G. Or 'off' or '0' for unlimited. The script uses --drive-stop-on-upload-limit which stops the script if the 750GB/day limit is achieved, so you no longer have to slow 'trickle' your files all day if you don't want to e.g. could just do an unlimited job overnight.
- BWLimit1Time="01:00"
- BWLimit1="off"
- BWLimit2Time="08:00"
- BWLimit2="15M"
- BWLimit3Time="16:00"
- BWLimit3="12M"
- # OPTIONAL SETTINGS
- # Add name to upload job
- JobName="_daily_upload" # Adds custom string to end of checker file. Useful if you're running multiple jobs against the same remote.
- # Add extra commands or filters
- Command1="--exclude downloads/**"
- Command2=""
- Command3=""
- Command4=""
- Command5=""
- Command6=""
- Command7=""
- Command8=""
- # Bind the mount to an IP address
- CreateBindMount="N" # Y/N. Choose whether or not to bind traffic to a network adapter.
- RCloneMountIP="192.168.1.253" # Choose IP to bind upload to.
- NetworkAdapter="eth0" # choose your network adapter. eth0 recommended.
- VirtualIPNumber="1" # creates eth0:x e.g. eth0:1.
- # Use Service Accounts. Instructions: https://github.com/xyou365/AutoRclone
- UseServiceAccountUpload="N" # Y/N. Choose whether to use Service Accounts.
- ServiceAccountDirectory="/mnt/user/appdata/other/rclone/service_accounts" # Path to your Service Account's .json files.
- ServiceAccountFile="sa_gdrive_upload" # Enter characters before counter in your json files e.g. for sa_gdrive_upload1.json -->sa_gdrive_upload100.json, enter "sa_gdrive_upload".
- CountServiceAccounts="15" # Integer number of service accounts to use.
- # Is this a backup job
- BackupJob="N" # Y/N. Syncs or Copies files from LocalFilesLocation to BackupRemoteLocation, rather than moving from LocalFilesLocation/RcloneRemoteName
- BackupRemoteLocation="backup" # choose location on mount for deleted sync files
- BackupRemoteDeletedLocation="backup_deleted" # choose location on mount for deleted sync files
- BackupRetention="90d" # How long to keep deleted sync files suffix ms|s|m|h|d|w|M|y
- ####### END SETTINGS #######
- ###############################################################################
- ##### DO NOT EDIT BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING #####
- ###############################################################################
- ####### Preparing mount location variables #######
- if [[ $BackupJob == 'Y' ]]; then
- LocalFilesLocation="$LocalFilesShare"
- echo "$(date "+%d.%m.%Y %T") INFO: *** Backup selected. Files will be copied or synced from ${LocalFilesLocation} for ${RcloneUploadRemoteName} ***"
- else
- LocalFilesLocation="$LocalFilesShare/$RcloneRemoteName"
- echo "$(date "+%d.%m.%Y %T") INFO: *** Rclone move selected. Files will be moved from ${LocalFilesLocation} for ${RcloneUploadRemoteName} ***"
- fi
- RcloneMountLocation="$RcloneMountShare/$RcloneRemoteName" # Location of rclone mount
- ####### create directory for script files #######
- mkdir -p /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName #for script files
- ####### Check if script already running ##########
- echo "$(date "+%d.%m.%Y %T") INFO: *** Starting rclone_upload script for ${RcloneUploadRemoteName} ***"
- if [[ -f "/mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/upload_running$JobName" ]]; then
- echo "$(date "+%d.%m.%Y %T") INFO: Exiting as script already running."
- exit
- else
- echo "$(date "+%d.%m.%Y %T") INFO: Script not running - proceeding."
- touch /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/upload_running$JobName
- fi
- ####### check if rclone installed ##########
- echo "$(date "+%d.%m.%Y %T") INFO: Checking if rclone installed successfully."
- if [[ -f "$RcloneMountLocation/mountcheck" ]]; then
- echo "$(date "+%d.%m.%Y %T") INFO: rclone installed successfully - proceeding with upload."
- else
- echo "$(date "+%d.%m.%Y %T") INFO: rclone not installed - will try again later."
- rm /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/upload_running$JobName
- exit
- fi
- ####### Rotating serviceaccount.json file if using Service Accounts #######
- if [[ $UseServiceAccountUpload == 'Y' ]]; then
- cd /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/
- CounterNumber=$(find -name 'counter*' | cut -c 11,12)
- CounterCheck="1"
- if [[ "$CounterNumber" -ge "$CounterCheck" ]];then
- echo "$(date "+%d.%m.%Y %T") INFO: Counter file found for ${RcloneUploadRemoteName}."
- else
- echo "$(date "+%d.%m.%Y %T") INFO: No counter file found for ${RcloneUploadRemoteName}. Creating counter_1."
- touch /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/counter_1
- CounterNumber="1"
- fi
- ServiceAccount="--drive-service-account-file=$ServiceAccountDirectory/$ServiceAccountFile$CounterNumber.json"
- echo "$(date "+%d.%m.%Y %T") INFO: Adjusted service_account_file for upload remote ${RcloneUploadRemoteName} to ${ServiceAccountFile}${CounterNumber}.json based on counter ${CounterNumber}."
- else
- echo "$(date "+%d.%m.%Y %T") INFO: Uploading using upload remote ${RcloneUploadRemoteName}"
- ServiceAccount=""
- fi
- ####### Upload files ##########
- # Check bind option
- if [[ $CreateBindMount == 'Y' ]]; then
- echo "$(date "+%d.%m.%Y %T") INFO: *** Checking if IP address ${RCloneMountIP} already created for upload to remote ${RcloneUploadRemoteName}"
- ping -q -c2 $RCloneMountIP > /dev/null # -q quiet, -c number of pings to perform
- if [ $? -eq 0 ]; then # ping returns exit status 0 if successful
- echo "$(date "+%d.%m.%Y %T") INFO: *** IP address ${RCloneMountIP} already created for upload to remote ${RcloneUploadRemoteName}"
- else
- echo "$(date "+%d.%m.%Y %T") INFO: *** Creating IP address ${RCloneMountIP} for upload to remote ${RcloneUploadRemoteName}"
- ip addr add $RCloneMountIP/24 dev $NetworkAdapter label $NetworkAdapter:$VirtualIPNumber
- fi
- else
- RCloneMountIP=""
- fi
- # Remove --delete-empty-src-dirs if rclone sync or copy
- if [[ $RcloneCommand == 'move' ]]; then
- echo "$(date "+%d.%m.%Y %T") INFO: *** Using rclone move - will add --delete-empty-src-dirs to upload."
- DeleteEmpty="--delete-empty-src-dirs "
- else
- echo "$(date "+%d.%m.%Y %T") INFO: *** Not using rclone move - will remove --delete-empty-src-dirs to upload."
- DeleteEmpty=""
- fi
- # Check --backup-directory
- if [[ $BackupJob == 'Y' ]]; then
- echo "$(date "+%d.%m.%Y %T") INFO: *** Will backup to ${BackupRemoteLocation} and use ${BackupRemoteDeletedLocation} as --backup-directory with ${BackupRetention} retention for ${RcloneUploadRemoteName}."
- LocalFilesLocation="$LocalFilesShare"
- BackupDir="--backup-dir $RcloneUploadRemoteName:$BackupRemoteDeletedLocation"
- else
- BackupRemoteLocation=""
- BackupRemoteDeletedLocation=""
- BackupRetention=""
- BackupDir=""
- fi
- # process files
- rclone $RcloneCommand $LocalFilesLocation $RcloneUploadRemoteName:$BackupRemoteLocation $ServiceAccount $BackupDir \
- --user-agent="$RcloneUploadRemoteName" \
- -vv \
- --buffer-size 512M \
- --drive-chunk-size 512M \
- --tpslimit 8 \
- --checkers 8 \
- --transfers 4 \
- --order-by modtime,$ModSort \
- --min-age $MinimumAge \
- $Command1 $Command2 $Command3 $Command4 $Command5 $Command6 $Command7 $Command8 \
- --exclude *fuse_hidden* \
- --exclude *_HIDDEN \
- --exclude .recycle** \
- --exclude .Recycle.Bin/** \
- --exclude *.backup~* \
- --exclude *.partial~* \
- --drive-stop-on-upload-limit \
- --bwlimit "${BWLimit1Time},${BWLimit1} ${BWLimit2Time},${BWLimit2} ${BWLimit3Time},${BWLimit3}" \
- --bind=$RCloneMountIP $DeleteEmpty
- # Delete old files from mount
- if [[ $BackupJob == 'Y' ]]; then
- echo "$(date "+%d.%m.%Y %T") INFO: *** Removing files older than ${BackupRetention} from $BackupRemoteLocation for ${RcloneUploadRemoteName}."
- rclone delete --min-age $BackupRetention $RcloneUploadRemoteName:$BackupRemoteDeletedLocation
- fi
- ####### Remove Control Files ##########
- # update counter and remove other control files
- if [[ $UseServiceAccountUpload == 'Y' ]]; then
- if [[ "$CounterNumber" == "$CountServiceAccounts" ]];then
- rm /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/counter_*
- touch /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/counter_1
- echo "$(date "+%d.%m.%Y %T") INFO: Final counter used - resetting loop and created counter_1."
- else
- rm /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/counter_*
- CounterNumber=$((CounterNumber+1))
- touch /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/counter_$CounterNumber
- echo "$(date "+%d.%m.%Y %T") INFO: Created counter_${CounterNumber} for next upload run."
- fi
- else
- echo "$(date "+%d.%m.%Y %T") INFO: Not utilising service accounts."
- fi
- # remove dummy file
- rm /mnt/user/appdata/other/rclone/remotes/$RcloneUploadRemoteName/upload_running$JobName
- echo "$(date "+%d.%m.%Y %T") INFO: Script complete"
- exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement