3个备份系统文件并邮件发送的Shell脚本分享

1.安装MUTT邮件客户端

# yum install mutt -y

2.创建脚本

# vi /etc/rc.d/mail_to_bak_daily.sh

版本一:

#!/bin/bash
# =========================================================
# 请输入,你想让备份数据放置到哪个独立的目录区
basedir=/backup/daily
# =========================================================
PATH=/bin:/usr/bin:/sbin:/usr/sbin::/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin;
export PATH
export LANG=C
# 定义数据库信息
user=root
passwd=123456
# 定义mysql备份路径
mysql_db_bak=$basedir/mysql_db_bak/$(date +%F_%H%M)
[ ! -d "$mysql_db_bak" ] && mkdir -p $mysql_db_bak
# 定义www备份路径
www_src_bak=$basedir/www_src_bak/$(date +%F_%H%M)
[ ! -d "$www_src_bak" ] && mkdir -p $www_src_bak
# 定义邮件附件路径
mail_attach_mysql=$mysql_db_bak/wordpress.sql
mail_attach_www=$www_src_bak/www.tar.bz2
# 定义邮件标题
mail_subject="www.example.com_daily_backup"
# 注:这里的标题之间的字符不能有空格,如有空格会按照邮件名发出,例如daily@www.example.com,backup@www.example.com 本例以下划线代替
# 定义邮件内容
mail_content=/tmp/mail_content.txt
mail_code="send MySQL_BAK and WWW_SRC to you at $(date +%F_%H%M)"
# 定义邮件地址
mail_address="test@example.com"
# 1. 备份MySQL (数据库目录在/usr/local/mysql)
mysqldump -u $user -p$passwd --opt --skip-lock-tables --flush-logs --database wordpress > $mysql_db_bak/wordpress.sql
# 2.备份www源代码:
cd /usr/local
tar -jpcf $www_src_bak/www.tar.bz2 www
# 3.邮件正文
cd /tmp
echo $mail_code > $mail_content
# 4.发送附件
yum install mutt -y
cat $mail_content |mutt -s $mail_subject -a $mail_attach_mysql -a $mail_attach_www -- $mail_address
# 5.清除临时文件
cd /tmp
 rm -rf $mail_content

版本二:推荐

注:此版本将附件分开发送,对邮箱同时发送多个大附件有收不到的几率的情况,可按照如下版本重新配置

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin::/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin;
export PATH
export LANG=C
# 系统文件备份路径
basedir=/backup/daily
# 数据库信息
user=root
passwd=123456
# 定义mysql备份路径
mysql_db_bak=$basedir/mysql_db_bak/$(date +%F_%H%M)
if [ ! -d "$mysql_db_bak" ];
 then
  mkdir -p $mysql_db_bak
fi
# 定义www备份路径
www_src_bak=$basedir/www_src_bak/$(date +%F_%H%M)
if [ ! -d "$www_src_bak" ];
 then
  mkdir -p $www_src_bak
fi
# 备份文件
mysql_bak=$mysql_db_bak/wordpress.sql.gz
www_bak=$www_src_bak/www.tar.bz2
# 定义备份文件作为附件的数组
all_bak=($mysql_bak $www_bak)
# 邮件标题
mail_subject="www.showerlee.com_daily_backup"
# 邮件内容
mail_content_mysql="send MySQL_BAK at $(date +%F_%H%M)"
mail_content_www="send WWW_SRC at $(date +%F_%H%M)"
# 定义内容数组
mail_content=("$mail_content_mysql" "$mail_content_www")
# 邮件地址
mail_address="test@example.com"
# 1. 备份MySQL (数据库目录在/usr/local/mysql)
mysqldump -u $user -p$passwd --opt --skip-lock-tables --flush-logs --database wordpress | gzip > $mysql_bak
# 2.备份www源代码:
cd /usr/local
 tar -jpcf $www_bak www
# 3.发送附件
yum install mutt -y
for((i=0; i!=${#all_bak[@]}; ++i))
{
 echo ${mail_content[i]} | mutt -s $mail_subject $mail_address -a ${all_bak[i]}
}
# 4.清理mutt临时文件
cat /dev/null > ~/sent

版本三:

实现rar分割并附件发送
推荐附件超过50M的用户使用

#/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin::/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin;
export PATH
export LANG=C
# 系统文件备份路径
basedir=/data/backup/daily
# 数据库信息
user=root
passwd=123456
# 安装rar
rar=$(rar | grep RAR | awk '{print $1}'| sed -n '1p')
if [ $? != 0 ];then
 rar=null
fi
sys_version=$(uname -m)
rar_path="/usr/local/rar"
if [ $rar != 'RAR' ];then
  if [ $sys_version == 'x86_64' ];then
    wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gz
    tar zxvf rarlinux-x64-4.2.0.tar.gz
    mv rar $rar_path
    cd $rar_path
    make
  else
    wget http://www.rarlab.com/rar/rarlinux-4.2.0.tar.gz
    tar zxvf rarlinux-4.2.0.tar.gz
    mv rar $rar_path
    cd $rar_path
    make
  fi
fi
# 定义mysql备份路径
mysql_db_bak=$basedir/mysql_db_bak/$(date +%F_%H%M)
if [ ! -d "$mysql_db_bak" ];
then
  mkdir -p $mysql_db_bak
fi
# 定义www备份路径
www_src_bak=$basedir/www_src_bak/$(date +%F_%H%M)
if [ ! -d "$www_src_bak" ];
then
  mkdir -p $www_src_bak
fi
# 备份文件
mysql_bak=$mysql_db_bak/test.sql.gz
www_bak=$www_src_bak/www.rar
www_bak_part1=$www_src_bak/www.part1.rar
www_bak_part2=$www_src_bak/www.part2.rar
www_bak_part3=$www_src_bak/www.part3.rar
# 定义附件数组
all_bak=($mysql_bak $www_bak_part1 $www_bak_part2 $www_bak_part3)
# 邮件标题
mail_subject="showerlee.com_and_yanwenbo.cn_daily_backup"
# 邮件内容
mail_content_mysql="send MySQL_BAK at $(date +%F_%H%M)"
mail_content_www_p1="send WWW_SRC rarball part1 at $(date +%F_%H%M)"
mail_content_www_p2="send WWW_SRC rarball part2 at $(date +%F_%H%M)"
mail_content_www_p3="send WWW_SRC rarball part3 at $(date +%F_%H%M)"
# 定义内容数组
mail_content=("$mail_content_mysql" "$mail_content_www_p1" "$mail_content_www_p2" "$mail_content_www_p3")
# 邮件地址
mail_address1="showerlee@vip.qq.com"
mail_address2="kevinywb@vip.qq.com"
# 1. 备份MySQL
mysqldump -u $user -p$passwd --opt --skip-lock-tables --flush-logs --database test | gzip > $mysql_bak
# 2.备份www源代码(分割若干个45m的tar包)
if [ -z $rar ];then
   exit 0
fi
cd /data
rar a -v45000k $www_bak www
# 3.发送附件
for((i=0; i!=${#all_bak[@]}; ++i))
{
if [ -f ${all_bak[i]} ]; then
  echo ${mail_content[i]} | mutt -s $mail_subject $mail_address1 $mail_address2 -a ${all_bak[i]}
else
  echo ${mail_content[i]} | mutt -s $mail_subject $mail_address1 $mail_address2 -a $www_bak
  break
fi
}
# 4.清理mutt临时文件
cat /dev/null > ~/sent
# 5.清理1个月前的备份文件
dir=/data/backup/daily/
find $dir -mtime +30 -type d -name "201*" -print |xargs -i rm -rf {} 2>/dev/null
# 6.释放系统缓存
echo 1 > /proc/sys/vm/drop_caches

注:如果报如下错误

代码如下:

postdrop: warning: uid=0: File too large
sendmail: fatal: root(0): message file too big
Error sending message, child exited 75 (Deferred.).
Could not send the message.

是由于超过系统默认发送附件大小,修改成如下大小即可(2G)

# postconf -e "message_size_limit = 2048000000"
# postconf -e "mailbox_size_limit = 2048000000"

3.执行脚本

# sh /etc/rc.d/mail_to_bak_daily.sh

注:可利用 tail -f /var/log/maillog 查看发送日志
4.测试结果如图:
注:附件较大请耐心等待

(0)

相关推荐

  • Shell脚本监控服务器在线状态和邮件报警的方法

    对于服务器来说在线率很重要,出现问题要能及时解决,但系统管理员不能一直守在电脑旁边,通过脚本监控网站出现问题及时通过mail通知管理员,如果是139邮箱还可免费手机短信通知.注:通过系统直接发送mail容易被拦截,可使用mail连接第三方smtp发送邮件. shell脚本实现代码: 复制代码 代码如下: #!/bin/bash#set -xwhile truedo list=(www.jb51.net s.jb51.net) mail=jmj@jb51.net date=$(date -d "t

  • linux shell发送Email邮件的方法详解

    一封最简单的邮件 echo -e "To: handy1989@qq.com\nCC: handy1989@qq.com\nFrom: handy<handy@test.com>\nSubject: test\n\nhello world" | sendmail -t 看上去有点复杂,其实就是sendmail程序从标准输入读取邮件源码,-t参数表示从邮件源码提取收件人信息,然后发送到收件人的邮件服务器,我们稍做整理,将邮件源码保存在email.txt中如下 To: hand

  • Shell脚本实现硬盘空间和表空间的使用情况统计并邮件通知

    复制代码 代码如下: #/bin/bash #该脚本用于统计硬盘空间和表空间的使用情况,并邮件发出 #初始化环境变量 source /home/oracle/.bash_profile #获得本机ip ip=`/sbin/ifconfig eth0 | grep Bcast | cut -d : -f 2 | cut -d " " -f 1` #切换到本脚本目录 cd /home/oracle/shell/ #删除之前该脚本产生的日志文件 rm -rf $ip.txt #统计硬盘空间

  • PowerShell小技巧之使用Hotmail账号发送邮件

    在低版本的PowerShell上发送邮件可以借助.NET的system.net.mail.smtpclient类.在高版本的PowerShell中可以借助现成的命令:Send-MailMessage 我在尝试使用Hotmail时,遇到了一个错误: Send-MailMessage : The SMTP server requires a secure connection or the client was not authenticated. The server response was:

  • Powershell中调用邮件客户端发送邮件的例子

    你可以使用Send-MailMessage发送邮件,但是你想从你默认MAPI客户端准备发送一份邮件,这也不是很麻烦: 复制代码 代码如下: $subject = 'Sending via MAPI client'$body = 'My Message'$to = 'tobias@powertheshell.com' $mail = "mailto:$to&subject=$subject&body=$body" Start-Process -FilePath $mail

  • Shell脚本实现自动发送邮件的例子

    1.编辑用户Home目录下的.muttrc文件,设置发信环境. 复制代码 代码如下: # cat /root/.muttrc set envelope_from=yes set from=owinux@sina.cn set realname="Owinux" set use_from=yes set rfc2047_parameters=yes set charset="utf-8" 2.发信脚本 复制代码 代码如下: # cat automail.sh #!/b

  • Shell脚本实现删除邮件队列

    最近遇到了一个麻烦事:机器上邮件队列里老是被塞满,但是又不知道是什么地方发邮件写入的,十分蛋疼,没办法,只有临时处理一下了,写了个删除邮件的脚本rm_mqueue.sh. 复制代码 代码如下: #/bin/bash ###################################### #  touched by lingyun1 on 2014-12-01  # ###################################### #定义堵塞邮件文件路径 quepath=/var

  • 当备份数据库不能用时.用邮件列表得到WEBSHELL!(图)

    今天上午闲着无聊,刚好一个朋友发过来一个网站的后台管理密码.他要我帮他看看.我说你得到后台了.可以用备份数据库功能得到WEBSHELL啊.你还发过来干嘛.他说后台有数据备份的选项.但是不能用.大家看一下图! 里面有备份的选项.但是点了之后出现错误!应该是管理员把文件改名了.或者是位置改变了.不能备份数据库,那怎么办,不能白白的浪费这样的一个机会.我就在后台里面到处看了一下.发现可以通过改网站注册用户的邮件地址.我们用一句话木马替换,然后把邮件地址导出为ASP的文件.我们就可以利用一句话木马客户端

  • 3个备份系统文件并邮件发送的Shell脚本分享

    1.安装MUTT邮件客户端 # yum install mutt -y 2.创建脚本 # vi /etc/rc.d/mail_to_bak_daily.sh 版本一: #!/bin/bash # ========================================================= # 请输入,你想让备份数据放置到哪个独立的目录区 basedir=/backup/daily # =============================================

  • SpringBoot实现邮件发送功能的姿势分享

    目录 前言 I. 项目环境 1. 项目依赖 2. 配置 II. 邮件发送 1. 简单文本邮件发送 2. html发送 3. 添加附件 4. Freemaker模板 5. 测试与小结 III. 不能错过的源码和相关知识点 0. 项目 总结 前言 邮件发送,在实际的项目开发中,可能用的不是特别多,如果没有特定的需求,相信也没有多少小伙伴会特意的去关注,那么如果现在我们希望针对项目做一个异常的报警系统,当出现异常的时候,可以向指定的小伙伴发送邮件提醒,那么让我们来实现这个功能,可以怎么办呢? 这里介绍

  • Linux服务器硬件运行状态及故障邮件提醒的监控脚本分享

    监控硬件运行状况 shell 监控cpu,memory,load average,记录到log,当负载压力时,发电邮通知管理员. 原理: 1.获取cpu,memory,load average的数值 2.判断数值是否超过自定义的范围,例如(CPU>90%,Memory<10%,load average>2) 3.如数值超过范围,发送电邮通知管理员.发送有时间间隔,每小时只会发送一次. 4.将数值写入log. 5.设置crontab 每30秒运行一次. ServerMonitor.sh #

  • CentOS下mysql定时备份Shell脚本分享

    1.备份语句 复制代码 代码如下: # /usr/local/mysql/bin/mysqldump -utest -ptest test --socket=/tmp/mysql.3306.sock > /usr/local/mysql_backup/3306/test-`date +%Y%m%d`.sql.gz 语句说明:   /usr/local/mysql/bin/mysqldump:MySql安装目录下 -utest:分为两块,一块为-u一块为test:其中-u表示其为用户名,test表

  • 简单的远程FTP定时备份Shell脚本分享

    先说问题.公司现在有2台服务器,都是centos系统,一台本地(局域网),一台则在电信机房.因为工作需要,每天备份机房上的数据到本地,以前一直是FTP登录,然后下载到本地机器.现在则希望,利用本地的centos机器,自动备份到本地. 解决方法如下: 1.下载远程电信机房中机器上已打包好的数据.这个不难,一条语句搞定. 复制代码 代码如下: wget ftp://user_name:password@ip_address:port/dir/file_name 2.定时任务,需要写个脚本,并加入定时

  • php使用SAE原生Mail类实现各种类型邮件发送的方法

    本文实例讲述了php使用SAE原生Mail类实现各种类型邮件发送的方法.分享给大家供大家参考,具体如下: 用过SAE的都知道,SAE所有服务中,就数Mail服务最不行了,时不时邮件就发不出去.特别是企业邮局,连新浪自家的企业邮局都出问题.今天就给出解决方案. 先来看看SAE文档中给出的DEMO: $mail = new SaeMail(); $mail->setAttach( array( 'my_photo' => '照片的二进制数据' ) );//附件发送方法 $ret = $mail-&

  • JavaMail实现邮件发送的方法

    本文实例讲述了JavaMail实现邮件发送的方法.分享给大家供大家参考.具体如下: 下载 activation.jar 和 mail.jar 配置CLASSPATH,将上面两个jar包加入到CLASSPATH中. JavaBean : "SendEmail.java" package cls; import java.util.Date; import java.util.Properties; import javax.mail.*; import javax.mail.intern

  • python使用smtplib模块通过gmail实现邮件发送的方法

    本文实例讲述了python使用smtplib模块通过gmail实现邮件发送的方法.分享给大家供大家参考.具体实现方法如下: import smtplib from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText fromaddr = 'fromaddr@gmail.com' toaddr = 'toaddr@gmail.com' text = 'test email message sent

  • Python实现的查询mysql数据库并通过邮件发送信息功能

    本文实例讲述了Python实现的查询mysql数据库并通过邮件发送信息功能.分享给大家供大家参考,具体如下: 这里使用Python查询mysql数据库,并通过邮件发送宕机信息. Python代码如下: #-*- coding: UTF-8 -*- #!/usr/bin/env python ''''' author:qlzhong Created on 2015-6-29 征途宕机日志统计汇总 ''' import MySQLdb import time import datetime impo

  • Python实现定时备份mysql数据库并把备份数据库邮件发送

    一.先来看备份mysql数据库的命令 mysqldump -u root --password=root --database abcDataBase > c:/abc_backup.sql 二.写Python程序 BackupsDB.py #!/usr/bin/python # -*- coding: UTF-8 -*- ''''' zhouzhongqing 备份数据库 ''' import os import time import sched import smtplib from em

随机推荐