禪道及其數據庫自動備份及短信、郵件通知腳本

一、添加SMTP服務器

    bin/mail會默認使用本地sendmail發送郵件,而通過修改配置文件可以使用外部SMTP服務器,可以達到不使用sendmail而用外部的smtp服務器發送郵件的目的。

    在需要發送自動報警的服務器上修改如下文件,增加如下兩行

# vim /etc/mail.rc

set [email protected] smtp=smtp.126.com
set smtp-auth-user=doteyplay smtp-auth-password=*** smtp-auth=login
使用redhat的時候,在/etc/mail.rc裏改了一下外部smtp的設置,就可以使用外部郵箱發郵件了,但在ubuntu下可能沒有/etc/mail.rc這個文件
buntu上:
ubunut上mailx這個命令對應的deb包有bsd-mailx
bsd-mailx對應的配置文件是/etc/mail.rc跟centos一樣
apt-get install sendmail
apt-get install mailutils
apt-get install bsd-mailx

有時,設置完上面的,當echo一卦郵件時,接收郵箱仍然不能接收到郵件,此時可能並不是服務器上設置有問題,而是被反垃圾郵件給做掉了,如果用126的smtp服務器,發給騰訊和sina,就會出現550的錯誤(在服務器上mail中查看),騰訊說是羣發了大量郵件,即使你新申請一個,依然是這個報錯。而sina就很直接了“退信原因:外發IP歷史信譽度低”,很有可能是之前測試一些什麼太多了,所以導致了這個問題。然而直接發給126的就沒有問題。所以,單位測試環境有問題,部到線上的時候不一定有問題

    當然,這裏的SMTP服務器也可以使用別的,比如QQ的,但是QQ只能發幾卦,在測試的時候,總報錯:smtp-server: 454 Error: authentication failed, system busy,萬惡的TX啊!所以,後來就改126的SMTP服務器了,用起來還是相當不錯的。對於郵箱嘛,就用139郵箱吧,因爲有短信提醒,同樣,在測試的時候,QQ郵箱那個慢呀……

二、禪道自動備份腳本  

1、自動備份腳本

     #vim chandao_backup.sh

     #!/bin/bash
     #Auto backup for chandao
     #Date: first write on 2014.7.22
     #Vertion: v1.1

     date=`date +%Y-%m-%d`
     tarball="tar -jcf /opt/backup/chandao-$date.tar.bz2 chandao/"
     [email protected]
     [email protected]

     if [ ! -d "/opt/backup/" ]; then
             mkdir -p /opt/backup/
     fi

     cd /var/www/html/ && $tarball
     judge=`echo $?`

     if [ $judge == 0 ];then
             echo "backup is ok" | mail -s "Auto backup for chandao" $user1 $user2;
     else
             echo "backup is failure" | mail -s "Auto backup for chandao" $user1 $user2;
     fi

     find /opt/backup/ -type f -mtime +30 -name "*.bz2" -exec rm -rf {} \;

2、賦予腳本執行權限

chmod +x chandao_backup.sh

2、任務計劃自動執行

 #crontab -e
     0 0 * * * /bin/sh /opt/scripts/chandao_backup.sh > /dev/null 2>&1

三、數據庫自動備份腳本

1、自動備份腳本

    #vim db_backup.sh

     #!/bin/bash
     #Auto backup for mariadb
     #Date: first write on 2014.7.22
     #Vertion: v1.1

     date=`date +%Y-%m-%d`
     datadir="tar -jcf /opt/backup/datadir-$date.tar.bz2 /data"
     #alldb="mysqldump --all-databases > /opt/backup/alldb-$date.sql"
     #zentaodb="mysqldump --databases zentao > /opt/backup/zentao-$date.sql"
     [email protected]
     [email protected]

     if [ ! -d "/opt/backup/" ]; then
             mkdir -p /opt/backup/
     fi

     mysqldump --all-databases > /opt/backup/alldb-$date.sql && mysqldump --databases zentao > /opt/backup/zentao-$date.sql
     judge=`echo $?`

     if [ $judge == 0 ];then
             cd /opt/backup/ && tar -jcf ALLDB-$date.tar.bz2 alldb-$date.sql zentao-$date.sql --remove-files
             $datadir;
             judge1=`echo $?`
             if [ $judge1 == 0 ];then
                     echo "Backup is ok!" | mail -s "Auto backup for db" $user1 $user2;
             else
                     echo "Db is ok but datadir is failure!" | mail -s "Auto backup for db" $user1 $user2;
             fi
     else
             echo "Backup is failure,because of db backup is faild!" | mail -s "Auto backup for db" $user1 $user2;
     fi

     find /opt/backup/ -type f -mtime +30 -name "*.bz2" -exec rm -rf {} \;

2、賦予腳本執行權限     

chmod +x db_backup.sh

3、任務計劃自動執行

#crontab -e
0 0 * * * /bin/sh /opt/scripts/db_backup.sh > /dev/null 2>&1



四、更新腳本版本:

數據庫備份腳本v1.2

#!/bin/bash
    #Auto backup for mariadb
    #Date: first write on 2014.7.22
    #Vertion: v1.2

    date=`date +%Y-%m-%d`
    [email protected]
    [email protected]
    main(){
            tar -jcf /opt/backup/datadir-$date.tar.bz2 /data;
            if [ $? -eq 0 ];then
                    /usr/local/mysql/bin/mysqldump --all-databases > /opt/backup/alldb-$date.sql;
                    if [ $? -eq 0 ];then
                            sleep 2
                            /usr/local/mysql/bin/mysqldump --databases zentao > /opt/backup/zentao-$date.sql;
                            if [ $? -eq 0 ];then
                               cd /opt/backup/
                               tar -jcf ALLDB-$date.tar.bz2 alldb-$date.sql zentao-$date.sql --remove-files \
                               && echo "Backup is ok!" | mail -s "Auto backup for db" $user2;
                            else
                               echo "Zentao db backup failure" | mail -s "Auto backup for db" $user2;
                            fi
                    else
                            echo "All databases backup failure" | mail -s "Auto backup for db" $user2;
                    fi
            else
                    echo "Datadir backup failure,it's first step" | mail -s "Auto backup for db" $user2;
            fi

            find /opt/backup/ -type f -mtime +30 -name "*.bz2" -exec rm -rf {} \;
    }


    if [ ! -d "/opt/backup/" ]; then
            mkdir -p /opt/backup/;
            main;
    else
            main;
    fi


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章