[Meting]
[Music server="netease" id="1330861946" type="song"/]
[/Meting]

前言

shell脚本

#!/bin/ 
#进入到备份文件夹
cd /root/back
#创建存放备份文件和数据库的文件夹,并修改权限为777
mkdir -m 777 -p ./backup$(date +"%Y%m%d")
#导出数据库到备份文件夹内
mysqldump -u 数据库账号 -p密码 数据库 > ./backup$(date +"%Y%m%d")/blog.sql
#压缩存放备份文件和数据库的文件夹
tar zcvf ./backup$(date +"%Y%m%d").tar.gz ./backup$(date +"%Y%m%d")
#以附件形式发送压缩包到指定邮箱
echo "数据备份"|mail -v -s "备份时间:$(date +%Y-%m-%d)" -a  /root/back/backup$(date +"%Y%m%d").tar.gz [email protected]

#删除备份文件夹与压缩包
rm -rf /root/back/backup$(date +"%Y%m%d")
rm /root/back/backup$(date +"%Y%m%d").tar.gz

安装环境

yum install sendmail
yum install mailx

Debian/Ubuntu使用apt-get安装。
1.png

配置

centos7环境
在/etc/mail.rc增加如下配置:

set from="[email protected]"
set smtp="smtps://smtp.ym.163.com:465"
set smtp-auth-user="[email protected]"
set smtp-auth-password="xiaoke-password"
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb

填坑阿里云对25端口不开放,所以这次使用smtps协议也就是465端口来发送邮件

验证

echo "sometext"|mail -s "my subject" 要发送的邮箱地址

更新

在使用以上方式配置后,可以发送邮件但是会提示Error in certificate: Peer's certificate issuer is not recognized.

解决方法:

創建目錄,用來存放證書

mkdir -p /root/.certs/

向163請求證書

echo -n|openssl s_client -connect smtp.qiye.163.com:465|sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt

添加一個證書到證書數據庫中

certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt

使證書得到認可,避免發郵件後報錯:Error in certificate: Peer's certificate issuer is not recognized

cd /root/.certs   (一定要進入到證書所在目錄才行)
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu"  -d ./ -i ./163.crt

列出目錄下證書

certutil -L -d /root/.certs

3.追加配置:

vim /etc/mail.rc
set from="[email protected]"
set smtp="smtps://smtp.qiye.163.com:465"
set [email protected]
set smtp-auth-password=123456789
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs

测试

echo 'hello'|mail -v -s "test mail" [email protected]

QQ截图20181204161046.png

unbunt或debian
相对来说就很简单了,只需要将脚本最后一句echo "数据备份"|mail -v -s "备份时间:$(date +%Y-%m-%d)" -a /root/back/backup$(date +"%Y%m%d").tar.gz 邮箱改为sendEmail -f [email protected] -t [email protected] -s smtp.163.com -u 'test' -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp 'passwd' -m 'test'即可。
sendemail命令详解
收到此提示表示发送成功

-f [email protected]                    #发件人邮箱地址
-t [email protected]                     #收件人邮箱地址
-s smtp.163.com                   #发件人邮箱的smtp服务器地址
-u 'test'                      #邮件标题
-o message-content-type=html             #邮件内容格式为html
-o message-charset=utf8               #邮件内容编码为utf8
-xu [email protected]                  #发件人邮箱登录用户名
-xp 'passwd'                    #发件人邮箱登录密码
-m 'test'                      #邮件内容

也就是说centos系列系统用的是mail发送和debian系列用的是sendmail发送。

定时执行,每日备份

2、设定自动任务

crontab -e

SSH执行以上命令。

3、添加任务

00 00 * * * /root/backup.sh

按键盘字符:“i”,回车另起一行,添加以上代码,路径和时间请根据实际情况修改。
其中00 00为时间分/小时,可自行修改,例如:30 00 ,就是每天凌晨0:30运行这个脚本。这里的5个 分别代表分 时 日 月 周需要多久备份一次可以自己修改。

修改完成之后按esc或者ctrl+c退出编辑状态,再输入 :wq 保存任务。可以用crontab -l 来查看添加的任务是否在进行中。

crontab命令详解

以下是 crontab 文件的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
o minute: 区间为 0 – 59
o hour: 区间为0 – 23
o day-of-month: 区间为0 – 31
o month: 区间为1 – 12. 1 是1月. 12是12月.
o Day-of-week: 区间为0 – 7. 周日可以是0或7.
看不懂,没关系看这个
3333.png
00 00 * * *每天晚上00:00分执行备份
00 13 * * *每天下午03:00分执行备份
00 13 03 * *每月3号下午13点开始备份

效果

888.png

最后修改:2023 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏