shell脚本备份文件夹及子文件异常通过sendEmail25端口发邮件

安装sendEmail工具:

操作见网址:https://blog.csdn.net/rheostat/article/details/7975198

2、查看sendEmail使用说明:

(1)查看sendEmail帮助文档:

/usr/bin/sendemail --help

(2)sendEmail使用基本参数:

/usr/bin/sendemail

-f  [email protected] 发件人邮箱地址

-t  [email protected]  收件人邮箱

-s  smtp.qq.com  发件人邮箱的smtp服务器

-u  '标题'  邮件的主题

-o message-content-type=html  邮件内容的格式为html,也可以是text

-o message-charset=utf8  邮件内容编码

-xu [email protected]  发件人账号

-xp 123456  发件人密码

-m  '邮件内容'  邮件的内容

3、发送邮件命令demo:

sendemail -f [email protected] -t "[email protected]" -s smtp.qq.com -u '测试主题' -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp 123456 -m "邮件内容"

注意:-xp的密码不是邮箱登录密码,是发送邮箱开启POP3/SMTP后生成的授权密码。

4、shell脚本发送邮件代码如下:

(1)配置文件:

backupFilePath=/wocloud/soft/tomcat/yearAppraiseTomcat/tomcat/webapps/yearAppraiseSys/upload
saveBackupFilePath=/wocloud/db/jxFileBackups
fileName=upload
backupsFileDay=3
sendEmailAddr=/usr/bin/sendEmail
sendEmailFromSmtp=smtp.qq.com
[email protected]
sendEmailFromPassword=vripvkjgeaaaaaaa
[email protected]
sendEmailTitle=测试邮件主题
sendEmailContent=测试邮件内容

(2)代码:

注意:不同linux设备的sh路径可能不同,需通过which sh查看sh的绝对路径修改即可。

#!/bin/sh

#db_backups_conf.txt文件路径
db_backups_conf="/wocloud/shell/file_backups_conf.txt"

#判断文件是否存在
if [ -f "${db_backups_conf}" ];then
	
	echo $(date +'%Y-%m-%d %H:%M:%S')" 要备份的文件存在,开始进行文件备份"

	#获取等号前内容,作为map中的Key值
	dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))
	
	#获取等号后内容,作为map中的value值
	dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))

	#创建一个空map
	declare -A map=()
	
	#通过循环,将db_backups_conf配置文件中的信息存储在map中
	for((i=0;i<${#dbArrOne[@]};i++))
	do
		map[${dbArrOne[i]}]=${dbArrTwo[i]}
	done	

	#获取收件人的邮件账号的字符串
	semdEmailTo=${map["semdEmailTo"]}
	
	#获取默认的字符串分隔符
	old_ifs="$IFS"
	
	#设置字符串分隔符为逗号
	IFS=","
	
	#将收件人的邮件账号value值的字符串进行分隔,获取一个数组
	semdEmailToArr=($semdEmailTo)
	
	#将字符串的分隔符重新设置为默认的分隔符
	IFS="$old_ifs"	
	
	#获取当前年月日
	saveday=$(date +%Y%m%d)

	#获取超出备份天数的年月日
	delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d)
	
	#定义一个是否需要发送异常提醒邮件变量
	isSendEmailStr=0
	
	#判断要备份的文件夹是否存在
	if [ -d "/data/" ];then
		#文件夹存在
		
		#备份文件
		echo $(date +'%Y-%m-%d %H:%M:%S')" 备份文件:"${map["backupFilePath"]}
		
		#判断保存备份文件路径是否存在
		if [ -f "|${map['saveBackupFilePath']}/${saveday}/${map['fileName']}_$(date +'%Y%m%d%H%M%S')" ];then
				{
					cp -f -r ${map["backupFilePath"]} ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/
				} || {
					isSendEmailStr=1
				}
			
			else
			
				{
					mkdir -p ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')
				} || {
					isSendEmailStr=1
				}
				
				{
					cp -f -r ${map["backupFilePath"]} ${map["saveBackupFilePath"]}/${saveday}/${map["fileName"]}_$(date +'%Y%m%d%H%M%S')/
				} || {
					isSendEmailStr=1
				}
			
		fi
	
		#删除保存文件路径中n天前备份的数据文件
		echo $(date +'%Y-%m-%d %H:%M:%S')" 删除备份文件:"${map["saveBackupFilePath"]}/${delday}
		
		{
			rm -f -r ${map["saveBackupFilePath"]}/${delday}
		} || {
			isSendEmailStr=1
		}
		
		echo $(date +'%Y-%m-%d %H:%M:%S')" 文件备份完毕,脚本执行完毕"
		
	else
		#文件夹不存在
		isSendEmailStr=1
		
	fi
	
	#判断执行多个文件备份,是否有文件备份异常,如果有异常就发送邮件
	if [ ${isSendEmailStr} == "0" ];then
			echo $(date +'%Y-%m-%d %H:%M:%S')" 需要备份的文件都备份正常"
		else 
			echo $(date +'%Y-%m-%d %H:%M:%S')" 需要备份的文件有备份异常,开始发送邮件通知管理员"
			
			#遍历收件人的邮箱地址,逐个发送邮件
			for email in ${semdEmailToArr[@]};
			do
				echo $(date +'%Y-%m-%d %H:%M:%S')" 开始发送邮件:"${email}

				${map["sendEmailAddr"]} -f ${map["semdEmailFrom"]} -t "${email}" -s ${map["sendEmailFromSmtp"]} -u ""${map["sendEmailTitle"]} -o message-content-type=html -o message-charset=utf8 -xu ${map["semdEmailFrom"]} -xp ${map["sendEmailFromPassword"]} -m ""${map["sendEmailContent"]}
			done
			
			echo $(date +'%Y-%m-%d %H:%M:%S')" 需要备份的文件有备份异常,成功发送邮件通知管理员"
	fi

else
	echo "配置文件不存在"
fi

(3)配置参数说明:

参数意义如下:
backupFilePath:备份文件夹的绝对路径
saveBackupFilePath:保留备份文件的绝对路径
fileName:备份文件夹名称,只能是一个目前
backupsFileDay:保留备份文件的天数
sendEmailAddr=发送邮件工具sendEmail绝对路径
sendEmailFromSmtp=发件邮箱的服务器类型,例如QQ邮箱服务器为:smtp.qq.com
semdEmailFrom=发件邮箱
sendEmailFromPassword=发件邮箱的smtp授权码,不是发件邮箱登录密码
semdEmailTo=收件人邮箱,多个收件人邮箱用逗号隔开
sendEmailTitle=测试邮件主题(文本内容中一定不能包含=)
sendEmailContent=测试邮件内容(文本内容中一定不能包含=)

(4)使用注意事项:

使用注意事项:
1、默认的是.sh、.txt文件都要放在/woclod/shell脚本下,如果放置的路径变了,需要修改.sh中读取.txt配置文件的路径

 

你可能感兴趣的:(shell)