Created
April 8, 2018 09:26
-
-
Save annedorko/730f9db075c6c288c3b332af53850c18 to your computer and use it in GitHub Desktop.
Find and update all WordPress sites on Ubuntu 16.04
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Find, backup, and update all WordPress installations | |
# In progress, test for your configuration first | |
# Requires wp-cli and tar to be installed | |
# https://wp-cli.org/ | |
# | |
# Written for storing backups on mounted drive, but you can set to whatever folder you want | |
# Backs up databse and wp-content every other day | |
# Zips backups to save storage space | |
# Organized by BACKUP FOLDER > Date > Domain | |
# TODO: Deletes backup folders older than 8 days (i.e. keeps 4 backups at a time) | |
# Updates all core, database, plugins, themes | |
# Emails notification of update | |
today=$(date +'%Y-%m-%d') | |
yesterday=$(date -d "yesterday" '+%Y-%m-%d') | |
mount_folder=/PATH/TO/BACKUP/FOLDER | |
site_list=$mount_folder/records/sites-${today}.txt | |
# Detect WordPress sites | |
# & store results in text file | |
# Change /var/www to match the folder where your store WordPress sites | |
find /var/www -name 'wp-config.php' -exec dirname {} \; > ${site_list} | |
# Colors | |
red="\e[31m" | |
green="\e[32m" | |
bold="\e[1m" | |
redbold="\e[31;1m" | |
greenbold="\e[32;1m" | |
boldoff="\e[22m" | |
invert="\e[7m" | |
reset="\e[0m" | |
# WordPress Install Directory = $wordpress_dir | |
# === Site URL = "$(basename $(dirname "$wordpress_dir"))" | |
# === Site Root Path = "$(basename "$site_dir")" | |
while read wordpress_dir; do | |
# SET VARIABLES | |
domain=$(basename $(dirname "$wordpress_dir")) | |
backup_folder=${mount_folder}/${today}/${domain} | |
yesterday_folder=${mount_folder}/${yesterday}/${domain} | |
# Take backups every other day | |
# i.e. when neither today or yesterday have a folder | |
if [ ! -d "${backup_folder}" ] && [ ! -d "${yesterday_folder}" ]; then | |
sudo mkdir -p ${backup_folder} | |
sudo chown -R user:user ${backup_folder} # Change user:user to match your configuration | |
echo -e "${green}${bold}Created:${boldoff}${reset} Backup at ${backup_folder}" | |
# Backup database | |
dbname=${domain}-${today}.sql | |
dbexport=${backup_folder}/${dbname} | |
sudo -u anne -i -- wp db export ${dbexport} --path=${wordpress_dir} | |
if tar -zcf ${dbexport}.tar.gz ${dbexport} | |
then | |
rm ${dbexport} | |
echo -e "${greenbold}Zipped:${boldoff} ${dbexport}${reset}" | |
else | |
echo -e "${redbold}Error:${boldoff} Problem with ${dbexport}${reset}" | |
fi | |
# Backup wp-content | |
wpname=${domain}-wp-content | |
wpexport=${backup_folder}/${wpname} | |
if tar -zcf ${wpexport}.tar.gz ${wordpress_dir} | |
then | |
echo -e "${greenbold}Zipped:${boldoff} wp-content for ${invert}${domain}${reset}" | |
else | |
echo -e "${redbold}Error:${boldoff} Problem zipping ${bold}wp-content${boldoff} for ${invert}${domain}${reset}" | |
fi | |
else | |
echo -e "${bold}SKIPPED:${boldoff} ${domain} backed up recently." | |
fi # End if directory statement (skips backups already completed) | |
# Delete archive folders older than 8 days to save space | |
# TODO: Test run FIND command in one week | |
# sudo find ${mount_folder} -type d -ctime +8 -not -path "${mount_folder}/records/" | xargs rm -rf | |
# Run updates on current site | |
# Store output messages to txt files in backup folder | |
update_file=${backup_folder}/update | |
sudo -u user -i -- wp core update --path=${wordpress_dir} > ${update_file}-core.txt # Update user to your Linux user | |
sudo -u user -i -- wp core update-db --path=${wordpress_dir} > ${update_file}-db.txt # Update user to your Linux user | |
sudo -u user -i -- wp plugin update --all --path=${wordpress_dir} > ${update_file}-plugins.txt # Update user to your Linux user | |
sudo -u user -i -- wp theme update --all --path=${wordpress_dir} > ${update_file}-theme.txt # Update user to your Linux user | |
echo -e "${greenbold}Updated:${boldoff} Ran wp-cli updates for ${invert}${domain}${reset} ${green}core, database, plugins, and themes${reset}" | |
done < ${site_list} | |
echo "WordPress backups and updates run on ${today}!" | mail -s "WordPress updates run on ${today}" admin@example.com -r "server@example.com" | |
echo "WordPress backups and upgrades completed." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment