CentOS下自动备份WordPress的Shell脚本 v1.2 (分卷、发送到smtp邮箱)

另有一版://blog.upall.cn/788.html,下边代码这版对上一版稍有修改,除了不值一提的改动,有一项与之不同:增加了分卷功能,用于解决大包发不到邮箱的问题,每个卷单独发送。效果出下:

shell_wordpress_baker

blog.upall.cn.list

*

blog.upall.cn.Ex.list

.ttc
.mp3

wpBak.sh

#####################################
# 说明:WP备份脚本                    #
# 要求:安装7zip                     #
# 作者:upall,//blog.upall.cn/  #
#####################################
#!/bin/bash

# 配置
FILE_LIST="/web/sh/blog.upall.cn.list"       # 需要备份的文件清单
FILE_LIST_EX="/web/sh/blog.upall.cn.Ex.list" # 清单中排除不备的文件
MAIL_TO="user@upall.cn"     # 收件人
DIR_WP="/web/blog.upall.cn" # WP根目录
DB_NAME="blog_upall_cn"     # DB名称
DB_HOST="localhost"         # mysql服务器地址
DB_PORT="3306"              # DB端口号
DB_USER="blog.upallcn"      # DB用户名
DB_PWD="pblog.upallcn"      # DB密码
DIR_TEMP="/var/tmp"         # 存放待发送文件的临时目录(需要为空)
MAIL_CLIENT="/usr/local/bin/mutt" # 邮件客户端的名称,可不写路径
MAIL_TITLE="[blog.upall.cn]" # 邮件标题
FILE_PWD="blog.upall.cn"     # 压缩包密码
FILE_VOLUME="30m"            # 分卷大小 30M,可用单位:b、k、m、g
DIR_CUR=$PWD                 # 记录当前目录,SHELL需要切换目录
DATE=`date +%Y%m%d%H%M%S`
MSG_CONTENT=""               # 备份进度标志(保持空值不要改动!)

# 创建临时目录
if [ -z "$MSG_CONTENT" ]; then
	if [ ! -d $DIR_TEMP ]; then
		mkdir -p "$TEMP_DIR"
		if (( $? != 0 )); then
			MSG_CONTENT='CAN NOT MKDIR TEMP';
		fi
	fi
fi

# 测试WP目录
if [ -z "$MSG_CONTENT" ]; then
	if [ ! -d $DIR_WP ]; then
		MSG_CONTENT='WP FOLDER NOT FOUND';
	fi
fi

# 检测待备份文件列表是否存在
if [ -z "$MSG_CONTENT" ]; then
	if [ ! -e $FILE_LIST ]; then
		MSG_CONTENT='LIST FILE NOT FOUND';
	fi
fi

# 检测数据库帐号
if [ -z "$MSG_CONTENT" ]; then
	/usr/bin/mysqlshow -u $DB_USER --password=$DB_PWD
	if (( $? != 0 )); then
		MSG_CONTENT='Denied access to the database';
	fi
fi

# 备份数据库
if [ -z "$MSG_CONTENT" ]; then
	mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PWD $DB_NAME > $DIR_WP/DB$DATE.sql
	if (( $? != 0 )); then
		MSG_CONTENT='DUMP ERROR';
	fi
fi

# 备份WP文件
if [ -z "$MSG_CONTENT" ]; then
	cd $DIR_WP
	#7za a -p$FILE_PWD -xr@$FILE_LIST_EX $DIR_TEMP/BLOG.UPALL.CN$DATE.7z @$FILE_LIST
	/usr/local/bin/7za a -v$FILE_VOLUME -p$FILE_PWD -xr@$FILE_LIST_EX $DIR_TEMP/BLOG.UPALL.CN$DATE.7z @$FILE_LIST
	if (( $? != 0 )); then
		MSG_CONTENT='COMPRESS ERROR';
	fi
fi

# 发送邮件
if [ -z "$MSG_CONTENT" ]; then
	MSG_CONTENT='备份成功';
	if [ -z "$FILE_PWD" ]; then
		MSG_CONTENT=$MSG_CONTENT"";
	else
		MSG_CONTENT=$MSG_CONTENT",压缩包已加密";
	fi
	MSG_CONTENT=$MSG_CONTENT"<br />此SQL可更换域名:UPDATE  \`blog_posts\` SET  \`post_content\` = REPLACE(\`post_content\`,'//blog.upall.cn','http://newDomainName') WHERE \`post_content\` LIKE '%//blog.upall.cn%';";
	#将分卷的文件逐个发送(e参数指定的HTML格式需要mutt1.5+)
	INDEX=1
	TOTAL=`ls -l $DIR_TEMP BLOG.UPALL.CN*.7z* | grep "^-" | wc -l`
	for FILE in `ls -a $DIR_TEMP $DIR_TEMP BLOG.UPALL.CN*.7z*`
	do
		if [ -f "$DIR_TEMP/$FILE" ];then
			echo $MSG_CONTENT | $MAIL_CLIENT $MAIL_TO -s "[SUCCESS]$MAIL_TITLE - $INDEX/$TOTAL - $DATE" -a $DIR_TEMP/$FILE -e "set content_type=text/html\; charset=UTF-8"
			INDEX=$(($INDEX+1))
		fi
	done
else
	echo $MSG_CONTENT  | $MAIL_CLIENT \
		-e 'set content_type="text/html; charset=UTF-8"'
		-s "[ERROR]$MAIL_TITLE - $DATE"\
		$MAIL_TO
fi

# 清理退出
rm -f $DIR_WP/DB$DATE.sql
rm -f $DIR_TEMP/BLOG.UPALL.CN$DATE.7z*
cd $DIR_CUR
if [ -z "$MSG_CONTENT" ]; then
	exit 0
else
	echo "$MSG_CONTENT"
	exit 1
fi

for 部分代码的 win 版可以参考以下代码:

@echo off
setlocal EnableDelayedExpansion
set dir=C:\upall
:: 统计个数
for /f "delims=:" %%i in ('dir %dir% /a:-d /s /b ^| findstr /n .*') do (set fileSize=%%i)
set total=!fileSize!
:: 挨个处理
set index=1
for /f %%f in ('dir %dir% /a:-d /s /b') do (
	echo 第 !index!/%total% 个:%%f
	set /a index+=1
)
endlocal

邮件功能可以参考这篇文章末尾部分提供的Win版代码

点击返回顶部
  1. 留言
  2. 联系方式