返回
数据
分类

必赢手机登录网址原本是打算自己用Mysqldump写个脚本来做计划任务的,做到实时检测远程的服务器程序状态

日期: 2020-01-02 07:59 浏览次数 : 156

Ubuntu Server使用automysqlbackup脚本

Ubuntu Linux自动发邮件配置及邮件发送脚本

摘要 近期服务器程序正在调试,不能一天到晚远程连到服务器上瞅着,因此利用 <linux监测脚本+mail命令+qq邮箱+微信> 做到实时检测远程的服务器程序状态,当程序down掉之后保证我们能快速收到提醒。

 

 

1 mail环境搭建
1.1 安装mail套件
Ubuntu环境:apt-get install mutt msmtp

昨天服务器意外关闭,导致开发环境数据库文件损坏,所以想起了做自动备份的事情,原本是打算自己用Mysqldump写个脚本来做计划任务的,不过出于偷懒的角度考虑,在网上找了找,发现了automysqlbackup,看评论都还不错,而且本身也是shell脚本实现的。本着不重复造轮子的精神,就下载来使用了。

测试环境:Ubuntu 11.10

CentOS环境:我没有采用mutt,是用的sendmail或mail中的一种,有需要的同学可以参考这里。 

 

 

1.2 配置

地址:

  1. 安装mutt及msmtp软件

1.2.1 MUTT
系统全局设置/etc/Muttrc,如果使用某个系统用户,可以在~/.muttrc中设置。

 

 

vi .muttrc

选择的版本是最新的automysqlbackup-v3.0_rc6.tar.gz。

[plain] 

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="20043790"
set [email protected]
set envelope_from=yes

 

sudo apt-get install mutt  

1.2.2 MSMTP 

安装非常简单,比较麻烦的地方,是后面配置邮件客户端,以及脚本中的一个小bug。

sudo apt-get install msmtp  

创建~/.msmtprc和~/.msmtp.log,分别为配置和日志文件。

 

 

vi .msmtprc

1、在任意目录下,解压文件包

  1. 编辑配置文件vi ~/.muttrc

account default
host smtp.163.com
from [email protected]
auth plain
user 20043790
password 123456
logfile ~/.msmtp.log

 

[plain] 

由于password是明码,所以我们需要修改此文件的权限。

tar –xzf automysqlbackup-v3.0_rc6.tar.gz

set sendmail="/usr/bin/msmtp"  

chmod 600 .msmtprc

 

set use_from=yes  

touch ~/.msmtp.log

2、省事起见,切个权限

set realname="Guobao Jiang"  

1.2.3 验证邮件服务器

 

set [email protected]  

查看SMTP服务器是否支持认证的TLS加密:

sudo su -

set envelope_from=yes  

敲入如下命令:msmtp --host=smtp.163.com --serverinfo回车

 

 

必赢手机登录网址 1

3、安装(若对路径没有什么特别的要求,出现提示回车即可)

3.编辑配置文件vi ~/.msmtprc  (账号和密码相应改动,最好把该文件属性改为:

1.3 测试

 

[plain] 

1.3.1 发一封邮件

./install.sh

chmod 700 ~/.msmtprc  

必赢手机登录网址 2

默认配置文件位置:/etc/automysqlbackup

 

1.3.2 QQ PC客户端邮件提醒

 

其他人不能修改和查看)

必赢手机登录网址 3

默认sh文件位置:/usr/local/bin

[plain] 

1.3.3 微信邮件提醒

 

account default  

必赢手机登录网址 4

4、修改配置文件

host smtp.163.com  

2 linux守护脚本

 

from [email protected]  

[[email protected] src]# cat daemon.sh

安装完成,默认会有两个配置文件,一个是automysqlbackup.conf,还有一个是myserver.conf。

auth plain  

[[email protected] src]# cat daemon.sh
#!/bin/sh

 

user loveaborn  

programs="app1 app2 app3"

实际上看了安装脚本就知道,这两个文件本来就是拷贝冗余了一个出来,猜测用途是防止二次安装或者误操作的情况下,误操作覆盖已经配置好的配置文件。不过从脚本逻辑上看起来,貌似没太大用,因为他重装,照样两个文件一块会覆盖。不过如果发现automysqlbackup.conf配置有值的话,会给出提示就是了。

password ####  

while true
do
  for p in $programs
  do
      ps -e|grep $p |grep -v "grep" >/dev/null

 

logfile ~/.msmtp.log  

      if [ "$?" -ne 0 ]
      then
        timestr=`date +20%y%m%d_%H%M%S`
        echo "Time:$timestr, restart <$p>"
        /root/src/$p >/root/src/log/${p}_$timestr.log 2>&1 &
        echo "Unfortunately, $p restart."|mail -s warning_restart [email protected] -- -f [email protected]
      #else
        #echo "$p is running"
      fi
  done

依旧,为了偷懒期间,就直接修改automysqlbackup.conf了,毕竟这是默认配置,sh执行的时候,不用带任何参数。

 

  sleep 1
done

 

4.编写自动发送邮件脚本,如下:

我的云主机是centos的,用的是mail发邮件,同样可以用mutt的命令行发送方式。

主要需要注意的配置,有以下几个:(配置文件中,带有默认值,如果不需要更改,直接保持被注释的状态就好)

[plain] 

该守护脚本守护三个程序 app1-3,当有某一个程序死掉后,重启该程序并开启新的log,同时发邮件到指定的邮箱。

 

#!/bin/bash  

3 验证

# Username to access the MySQL server e.g. dbuser

######################################################################################  

killall app1后,守护脚本在1秒内将程序重启,约15秒后收到邮件提醒。

(数据库连接用户名)

# this shell script is used to send mail automatically  

推荐专题:

CONFIG_mysql_dump_username='root'

# the root structure is  

近期服务器程序正在调试,不能一天到晚远程连到服务器上瞅着,因此利用 linux监测脚本+mail命令+qq邮箱+微信 做到实时检测远程的服...

 

#      .  

# Password to access the MySQL server e.g. password(数据库连接密码)

#      ./autosend.sh        -- this shell script  

 

#      ./attach/            -- this folder stored mail's all attachment.  

必赢手机登录网址 ,CONFIG_mysql_dump_password='密码'

#      ./bak/               -- for backup  

 

#      ./log/               -- send & unsend log files  

 

#      ./mail/              -- mail text content, default file name './mail/mail.md'  

# "Friendly" host name of MySQL server to be used in email log

#      ./readme.md          -- readme file (not mandatory)  

# if unset or empty (default) will use CONFIG_mysql_dump_host instead(dump的时候,数据库host显示的别名,不配的话,基本就都是localhost之流了)

# version: v0.1 @Aug. 4, 2013, by Guobao Jiang   

CONFIG_mysql_dump_host_friendly='DataBaseAlias'

######################################################################################  

 

  

 

dateInfo="$(date +%Y-%m-%d-%H-%M-%S)"  

# Backup directory location e.g /backups(不用多说了,重中之重,备份路径)

attachName="attach_$dateInfo.tar.gz";  

CONFIG_backup_dir='/srv/backup/mysql'

contentFile="./mail/mail.md"  

 

toName="[email protected]"  

 

ccName="[email protected]"  

# List of databases for Daily/Weekly Backup e.g. ( 'DB1' 'DB2' 'DB3' ... )

if [ -f ./mail/mail.md ]; then  

# set to (), i.e. empty, if you want to backup all databases(需要日备份和周备份的数据库名称)

        if [ ! -f ./log/send.log ];then  

CONFIG_db_names=('TestDB')

                touch ./log/send.log  

 

        fi  

 

        sendLog="./log/send.log"  

# List of databases for Monthly Backups.

        tar zcvf $attachName ./attach   

# set to (), i.e. empty, if you want to backup all databases(需要月备份的数据库名称)

        sleep 2  

CONFIG_db_month_names=('TestDB')

        rm -rf ./attach/*  

 

        mkdir -p "./bak/mail_$dateInfo"  

# Which day do you want monthly backups? (01 to 31) (月备份的日期,如果配置的日期大于当月最大日期,会在当月最后一天的时候执行)

        cp $attachName "./bak/mail_$dateInfo"  

# If the chosen day is greater than the last day of the month, it will be done

        cp ./mail/mail.md  "./bak/mail_$dateInfo"  

# on the last day of the month.

  

# Set to 0 to disable monthly backups.

        echo -e "   " >>$contentFile  

#CONFIG_do_monthly="01"

        echo -e "------------------" >> $contentFile  

 

        echo -e "Note: This mail is automaticall by my server." >> $contentFile  

# Which day do you want weekly backups? (1 to 7 where 1 is Monday)(周备份在星期几发生)

        echo -e "BR// Guobao Jiang ([email protected])" >> $contentFile  

# Set to 0 to disable weekly backups.

        echo -e "DateRecord: $dateInfo" >> $contentFile  

#CONFIG_do_weekly="5"

  

 

        echo -e "  " >>"$sendLog"  

# Set rotation of daily backups. VALUE*24hours

        echo -e "-----------------------------------" >>"$sendLog"  

# If you want to keep only today's backups, you could choose 1, i.e. everything older than 24hours will be removed.(日备份文件保留多少天)

        echo -e "Sending mail..."  >>"$sendLog"  

CONFIG_rotation_daily=7

  

 

        mutt -s "Update Experiments Result $dateInfo"  -c $ccName $toName  

# Set rotation for weekly backups. VALUE*24hours(周备份文件保留多少天)

                -a $attachName< "$contentFile"  

#CONFIG_rotation_weekly=35

          

 

        if [ $? -eq 0 ]; then  

# Set rotation for monthly backups. VALUE*24hours(月备份文件保留多少天)

                rm -rf $attachName   

#CONFIG_rotation_monthly=150

                rm -rf ./mail/mail.md   

 

                #rm -rf ./attach/*       # if success, delete all attachment files.  

# Use ssl encryption with mysqldump?(是否使用ssl,本地的话,开ssl找抽?远程就另算了)

                echo -e "mail was sent to $toName and cc to $ccName successully!" >>  

CONFIG_mysql_dump_usessl='no'

                        "$sendLog"  

 

        else  

 

                rm -rf $attachName  

# What would you like to be mailed to you?(是不是想要备份完的时候,自动给你发个邮件?)

                rm -rf "./bak/mail_$dateInfo"  

# - log   : send only log file(邮件内容仅包含日志)

                echo -e "mail sent failed! Please try again!" >>"$sendLog"  

# - files : send log file and sql files as attachments (see docs)(邮件内容除了日志意外,把备份的压缩包也发给你)

        fi  

# - stdout : will simply output the log to the screen if run manually.(表邮件了,屏幕显示下就好。问题是谁吃饱没事一天到晚盯着server屏幕看?)

        echo -e "RecordTime:$dateInfo" >>"$sendLog"  

# - quiet : Only send logs if an error occurs to the MAILADDR.(出错了的话,给个信儿就好)

  

CONFIG_mailcontent='files'

else  

 

        if [ ! -f ./log/record.log ]; then  

# Email Address to send mail to? ([email protected])(mail地址咯,不用多说了吧)

                touch ./log/nosend.log  

CONFIG_mail_address='[email protected]'

        fi  

 

        echo -e "No mail contents to send!  RecordTime: $dateInfo" >>./log/nosend.log  

 

fi  

 

 

5、先改个脚本的小bug吧。。不过如果你的server上mail和mutt齐备,请忽略该步骤。

注意0: 文件autosend.sh,添加可执行属性

 

 

vi /usr/local/bin/automysqlbackup

[plain] 

到1026行,将:

chmod u+x autosend.sh  

 

 

 

注意1:附近 -a $attachName 放在最后,不然会出现如下错误:

if [[ "x$CONFIG_mailcontent" = 'xlog' || "x$CONFIG_mailcontent" = 'xquiet' ]]; then

 

      dependencies=( "${dependencies[@]}" 'mail' )

[html] 

    elif [[ "x$CONFIG_mailcontent" = 'xfiles' ]]; then

Can’t stat [email protected]: No such file or directory  

      dependencies=( "${dependencies[@]}" 'mail' )

[email protected]: unable to attach file.  

      if [[ "x$CONFIG_mail_use_uuencoded_attachments" != 'xyes' ]]; then

 

        dependencies=( "${dependencies[@]}" 'mutt' )

注意2:我的邮件内容是放在./mail/mail.md文件里的,发送完会备注到./bak下并删除原来的文件。

      fi

 

    fi

目录结构如下:

 

 

改为:

必赢手机登录网址 5

 

Linux自动发邮件配置及邮件发送脚本 测试环境:Ubuntu 11.10 1. 安装mutt及msmtp软件 [plain] sudo apt-get install mutt sudo apt-get install msmtp 2. 编辑配...

 

if [[ "x$CONFIG_mail_use_uuencoded_attachments" != 'xyes' ]]; then

      if [[ "x$CONFIG_mailcontent" = 'xlog' || "x$CONFIG_mailcontent" = 'xquiet' ]]; then

        dependencies=( "${dependencies[@]}" 'mutt' )

      elif [[ "x$CONFIG_mailcontent" = 'xfiles' ]]; then

          dependencies=( "${dependencies[@]}" 'mutt' )

        fi

        else

      if [[ "x$CONFIG_mailcontent" = 'xlog' || "x$CONFIG_mailcontent" = 'xquiet' ]]; then

        dependencies=( "${dependencies[@]}" 'mail' )

      elif [[ "x$CONFIG_mailcontent" = 'xfiles' ]]; then

          dependencies=( "${dependencies[@]}" 'mail' )

        fi

    fi

 

 

 

6、安装邮件客户端 mutt+msmtp

 

apt-get install mutt

安装mutt的时候,会自动安装postfix用作mail server,问题是这玩意太大,出于比较有洁癖的心态,我就主动把它干掉了。毕竟小巧玲珑的msmtp在那等着我呢。(看个人需求和喜好而定)

 

apt-get remove postfix –purge

apt-get autoremove –purge

 

安装msmtp

 

apt-get install msmtp

安装完了,来配邮件吧。

 

 

 

7、邮件客户端配置

 

vi /etc/Muttrc

最上面加上如下:

 

 

#My Mail Setting

set sendmail="/usr/bin/msmtp"

set use_from=yes

set realname="邮件地址别名"

set [email protected]

set envelope_from=yes

#不保留sent的本地存档

set copy = no

 

然后到~目录下,新建个.msmtprc

 

cd ~

vi .msmtprc

加上如下内容:

 

 

account 邮箱别名

host smtp.126.com

from [email protected]

auth plain

user username

password pwd

logfile ~/.msmtp.log

 

因为这里是明文密码,所以建议修改个600之流,再增加个日志文件

 

chmod 600 .msmtprc

touch ~/.msmtp.log

这全部完成了的话,可以试试邮件发不发的出去了。

 

echo "喂" |mutt -s "发出去没?" [email protected]

测试成功的话,就跑一下备份脚本看看吧

 

 

8、装上几个我服务器上木有的命令:

 

apt-get install pax

apt-get install pigz

 

 

9、mysql如果之前没设环境变量,只是加了个快捷方式的话,设个环境变量

 

vi  /etc/profile

在最后的位置加入

 

export  PATH=$PATH:/usr/local/mysql/bin

保存,然后再刷新检查下

 

source  /etc/profile 

echo $PATH

 

 

10、启动下备份脚本试试了,对了,记得要先创建备份路径

 

mkdir /srv/backup

mkdir /srv/backup/mysql

automysqlbackup

如果没什么问题的话,就会看到备份文件路径下面,自动给你创建好了几个目录:

 

daily  fullschema  latest  monthly  status  tmp  weekly

 

而且打开daily,里面应该就会有刚才备份的文件了。

 

再去check一下mail,都ok,那就配个计划任务就完事了。

 

 

 

11、配置计划任务

 

crontab –l

先查查看目前有没有任务,没有的话,就在~建个配置文件

 

cd ~

vi root-crontab

内容添上

 

30 23 * * * /usr/local/bin/automysqlbackup

 

表示每天23点30,自动运行备份脚本

 

然后再添加到计划任务里面去

 

crontab -u root root-crontab

齐活。。。

Server使用automysqlbackup脚本 昨天服务器意外关闭,导致开发环境数据库文件损坏,所以想起了做自动备份的事情,原本是打算自己用M...