-
-
Save ssmereka/8773626 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# Backup a Plex database. | |
# Author Scott Smereka | |
# Version 1.0 | |
# Script Tested on: | |
# Ubuntu 12.04 on 2/2/2014 [ OK ] | |
# Plex Database Location. The trailing slash is | |
# needed and important for rsync. | |
plexDatabase="/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/" | |
# Location to backup the directory to. | |
backupDirectory="/srv/raid10/backups/plexmediaserver/database/" | |
# Log file for script's output named with | |
# the script's name, date, and time of execution. | |
scriptName=$(basename ${0}) | |
log="/srv/raid10/backups/logs/${scriptName}_`date +%m%d%y%H%M%S`.log" | |
# Check for root permissions | |
if [[ $EUID -ne 0 ]]; then | |
echo -e "${scriptName} requires root privledges.\n" | |
echo -e "sudo $0 $*\n" | |
exit 1 | |
fi | |
# Create Log | |
echo -e "Staring Backup of Plex Database." > $log 2>&1 | |
echo -e "------------------------------------------------------------\n" >> $log 2>&1 | |
# Stop Plex | |
echo -e "\n\nStopping Plex Media Server." >> $log 2>&1 | |
echo -e "------------------------------------------------------------\n" >> $log 2>&1 | |
sudo service plexmediaserver stop >> $log 2>&1 | |
# Backup database | |
echo -e "\n\nStarting Backup." >> $log 2>&1 | |
echo -e "------------------------------------------------------------\n" >> $log 2>&1 | |
sudo rsync -av --delete "$plexDatabase" "$backupDirectory" >> $log 2>&1 | |
# Restart Plex | |
echo -e "\n\nStarting Plex Media Server." >> $log 2>&1 | |
echo -e "------------------------------------------------------------\n" >> $log 2>&1 | |
sudo service plexmediaserver start >> $log 2>&1 | |
# Done | |
echo -e "\n\nBackup Complete." >> $log 2>&1 |
Thanks for this. I forked it and made it work under Mac OS.
Can you add the feature to delete Backup-Version there are older then like 14 versions?
Working on 18.04. Thanks!
It worked in focal fossa, good job, thank you!
Thank you for the script! I've modified somewhat it so that:
- Now EXCLUDES the /Cache directory (that was trickier than expected) which for me saves ~700 mb of space per backup.
- Also updated log to append so log is a continuous track of when and what.
- Also updated as I have both a READ ONLY mount and a READ/WRITE mount, so now the R/W share is ONLY mounted at run time of script (me and my “this user should ONLY ever have READ access to my media” paranoia… lol)… NOTE: this also then requires the /mnt/buplex share to have the “noauto” option in /etc/fstab file…
- Creates a different backup file via TAR each time, vs using RSYNC (which I found walking my tree rather slow and painful, and I want separate DB backups in case DB gets corrupted somehow... I don't to overwrite a good backup with a bad one etc).
- Possibly a few other tweaks I'm forgetting. Sorry.
NOTE: the LAST bit of the file (unmounting R/W share) happens AFTER logging and r/w access to the log file (in my setup) ends... so NO ERROR will be caught if unmount of r/w mount fails. Move your log file somewhere else if this concerns you more than me (ie, you set this up to be automated, not manually run) ;-)
Some of the above others probably don’t want or need, but just FYI might prove useful (and as a note to self for my own future sanity!)
SCRIPT CODE BELOW HERE
#!/bin/bash
# Backup a Plex database.
# Original Author Scott Smereka
# Edited by Neil C.
# Version 1.1
# Script Tested on:
# Ubuntu 20.04 on 2020-Aug-9 [ OK ]
# Plex Database Location. The trailing slash is
# needed and important for rsync.
plexDatabase="/var/lib/plexmediaserver/Library/Application Support/Plex Media Server"
# Location to backup the directory to.
backupDirectory="/mnt/buplex/Archive/Plex_Backups"
# Log file for script's output named with
# the script's name, date, and time of execution.
scriptName=$(basename ${0})
log="/mnt/buplex/Archive/Plex_Backups/logs/buplex.log"
# Check for root permissions
if [[ $EUID -ne 0 ]]; then
echo -e "${scriptName} requires root privileges.\n"
echo -e "sudo $0 $*\n"
exit 1
fi
# Mount Plex Media Share in R/W mode
sudo mount /mnt/buplex
# Create Log
echo -e "***********" >> $log 2>&1
echo -e "$(date '+%Y-%b-%d at %k:%M:%S') :: Mounted Share in R/W Mode." | tee -a $log 2>&1
# Stop Plex
echo -e "$(date '+%Y-%b-%d at %k:%M:%S') :: Stopping Plex Media Server." | tee -a $log 2>&1
sudo service plexmediaserver stop | tee -a $log 2>&1
# Backup database
echo -e "$(date '+%Y-%b-%d at %k:%M:%S') :: Starting Backup." | tee -a $log 2>&1
# WORKING Line: sudo tar cfz "$backupDirectory/buplex-$(date '+%Y-%m(%b)-%d at %khr %Mmin').tar.gz" "$plexDatabase" >> $log 2>&1
# cd into directory so the magic --exclude below works per:
# https://stackoverflow.com/questions/984204/shell-command-to-tar-directory-excluding-certain-files-folders
cd "$plexDatabase"
sudo tar cz --exclude='./Cache' -f "$backupDirectory/buplex-$(date '+%Y-%m(%b)-%d at %khr %Mmin').tar.gz" . >> $log 2>&1
# Restart Plex
echo -e "$(date '+%Y-%b-%d at %k:%M:%S') :: Starting Plex Media Server." | tee -a $log 2>&1
sudo service plexmediaserver start | tee -a $log 2>&1
# Done
echo -e "$(date '+%Y-%b-%d at %k:%M:%S') :: Backup Complete. Unmounting R/W Share..." | tee -a $log 2>&1
echo -e "***********" >> $log 2>&1
sudo umount /mnt/buplex
Tested on Linux Mint 19 Mate, works great
Can you add the feature to delete Backup-Version there are older then like 14 versions?
Create another bash file and add the following then run a cron weekly to keep things tidy, this is set to 10 days but depends how often you backup.
#!/bin/bash
#Name:
#Author:
#Date:
#Description: Cleanup files older than 10 days inside DIRECTOR_TO_CLEANUP
DIRECTORY_TO_CLEANUP="/mnt/buplex/Archive/Plex_Backups"
LOGFILE="/home/cleanup.txt"
/usr/bin/find ${DIRECTORY_TO_CLEANUP} -type f -mtime +10 -delete >${LOGFILE} 2>&1
Sadly I have a huge /var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Media
folder that rsync and tar got killed within the process to backup that 'Media' folder.
Any other idea?
tar -zcvf is running for a while and it gets killed:
Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/Subtitle Contributions/com.plexapp.agents.localmedia/
Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/Subtitle Contributions/com.plexapp.system/
Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/GoP-0.xml
Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/Subtitles/
Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/
Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/
Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/Subtitles.xml
Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/Thumbnails/
Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/Thumbnails/thumb1.jpg
Killed
Sadly I have a huge
/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Media
folder that rsync and tar got killed within the process to backup that 'Media' folder.Any other idea?
tar -zcvf is running for a while and it gets killed:
Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/Subtitle Contributions/com.plexapp.agents.localmedia/ Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/Subtitle Contributions/com.plexapp.system/ Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/GoP-0.xml Media/localhost/1/571848b10aa99619bf4b3fab7e89847194a46fe.bundle/Contents/Subtitles/ Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/ Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/ Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/Subtitles.xml Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/Thumbnails/ Media/localhost/1/ef636c36896a6c53e515dd3c07a4df2d8dbd532.bundle/Contents/Thumbnails/thumb1.jpg Killed
I'm unsure if you still have issues with this, but I went from 244G used on media to 24 after deleting video previews.
Thanks for the script. Works on Xenial (16.04).
I prefer seeing some status on the terminal, so I replaced the
>> $log
with| tee -a $log
on all except the rsync line.