Skip to content

Instantly share code, notes, and snippets.

@mitchellrj
Created August 10, 2011 00:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mitchellrj/1135581 to your computer and use it in GitHub Desktop.
Save mitchellrj/1135581 to your computer and use it in GitHub Desktop.
Automated Wordpress updates from the command line
#!/bin/bash
wp_dir=$1
backup_dir=$2
latest_version=`echo -e "HEAD /latest.tar.gz HTTP/1.1\nHost: wordpress.org\n\n" | \
nc -i 1 wordpress.org 80 | \
grep 'Content-Disposition:' | \
sed 's:.*filename=[A-Za-z-]*\([0-9\.]*\)\.tar\.gz.*:\1:'`
current_version=`grep '$wp_version = ' ${wp_dir}/wp-includes/version.php | \
sed "s:.*['\"]\([0-9\.]*\)['\"].*:\1:"`
function version_cmp {
return `echo "$2 $1" | \
awk '{
split($1, a, ".");
split($2, b, ".");
x = 0;
for (i = 1; i <= 4; i++)
if (a[i] < b[i]) {
x =-1;
break;
} else if (a[i] > b[i]) {
x = 1;
break;
}
print x;
}'`
}
echo "Current version: $current_version"
echo "Latest version: $latest_version"
version_cmp $current_version $latest_version
difference=$?
if [ "$difference" -le "0" ]
then
echo "Already at the latest version."
exit 0
elif [ "$difference" -gt "0" ]
then
backup_file=$backup_dir/`date "+%F-%H-%M-%S"`.tar.gz
echo "Backing up to $backup_file."
db_user=`grep "define('DB_USER'" ${wp_dir}/wp-config.php | \
sed "s:.*define[ \t]*(['\"][^'\"]*['\"][ \t]*,[ \t]*['\"]\([^'\"]*\).*:\1:"`
db_pass=`grep "define('DB_PASSWORD'" ${wp_dir}/wp-config.php | \
sed "s:.*define[ \t]*(['\"][^'\"]*['\"][ \t]*,[ \t]*['\"]\([^'\"]*\).*:\1:"`
db_name=`grep "define('DB_NAME'" ${wp_dir}/wp-config.php | \
sed "s:.*define[ \t]*(['\"][^'\"]*['\"][ \t]*,[ \t]*['\"]\([^'\"]*\).*:\1:"`
db_host=`grep "define('DB_HOST'" ${wp_dir}/wp-config.php | \
sed "s:.*define[ \t]*(['\"][^'\"]*['\"][ \t]*,[ \t]*['\"]\([^'\"]*\).*:\1:"`
db_prefix=`egrep "table_prefix\s*=" ${wp_dir}/wp-config.php | \
sed "s:^.*table_prefix[ \t]*=[ \t]*['\"]\([^'\"]*\).*:\1:"`
sql_file=$wp_dir/`date "+%F-%H-%M-%S"`.sql
mysqldump -h$db_host -u$db_user --password="$db_pass" $db_name > $sql_file
tar -cz -C `dirname $wp_dir` -f $backup_file `basename $wp_dir`
rm $sql_file
echo "Downloading Wordpress $latest_version."
download_file=`mktemp`
wget -q http://wordpress.org/latest.tar.gz -O $download_file
echo "Extracting downloaded archive..."
strip_arg="--strip-path"
version_cmp "1.14.90" "`tar --version | head -n 1 | egrep -o '[0-9\.]*$'`"
tar_version=$?
if [ "$tar_version" -gt "0" ]
then
strip_arg="--strip-components"
fi
tar -zx $strip_arg 1 -C $wp_dir -f $download_file
rm $download_file
wp_siteurl=`mysql -h$db_host -u$db_user -p$db_pass $db_name -s -r \
--execute="select option_value
from ${db_prefix}options
where option_name='siteurl';" | \
grep -v 'option_value'`
echo "Checking if data update required..."
# Need to log in for this to work
update_page=`wget -q $wp_siteurl/wp-admin/upgrade.php -O -`
if [ `echo $update_page | grep 'No Update Required'` ]
then
# Update required
echo "Data update is required."
elif [ `echo $update_page | grep 'You cannot update'` ]
then
echo "Manual update required."
else
echo "No further update required."
fi
echo "Manual update may be required. Visit $wp_siteurl/wp-admin/upgrade.php" | \
mail -s "Wordpress at $wp_siteurl updated to $latest_version" root
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment