linux两台服务器互相备份文件(sshpass + crontab)

crontab

crontab是linux系统自带的定时调度软件,可用于设置周期性被执行的指令,一般用在每天的非高峰负荷时间段运行作业,可在无需人工干预的情况下运行作业。支持在一周或一月中的不同时段运行。
crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。服务器备份文件,我们要用crontab执行周期性的备份工作。

sshpass

sshpass 可在不直接输入密码的情况下,通过 SSH 连接到远程主机并执行命令。与手动输入凭据相比,sshpass 避免了手动输入密码,提高自动化流程的执行效率。两台服务器之间互相备份文件,要用到sshpass连接并传输文件。

步骤

1、创建sh文件,如下:

#!/bin/sh
source /etc/profile

#设置备份的源文件夹
backup_source=/home/admin/sh
#设置目的服务器地址 
remote_username=admin
remote_ip=10.10.11.60
remote_password=qwer123
remote_folder=/home/admin/sk
 
 
#创建备份的缓存文件夹backup_home
backup_home=/home/admin/backup_home
if [ ! -d ${backup_home} ];then
    mkdir ${backup_home}
    if [ $? -eq 0 ]; then
        echo "缓存文件夹创建成功"
    else
        echo "缓存文件夹创建失败"
        exit 1
    fi
else
    echo "缓存文件夹已经存在"
fi
 
#压缩文件到backup_home
date=$(date +%Y%m%d)
zip -q -r ${backup_home}/${date}.zip ${backup_source}
if [ $? -eq 0 ]; then
    echo "文件压缩成功"
else
    echo "文件压缩失败"
    exit 1
fi
 
#从本地复制到远程
sshpass -p ${remote_password} scp ${backup_home}/${date}.zip ${remote_username}@${remote_ip}:${remote_folder} 
if [ $? -eq 0 ]; then
    echo "从本地复制到远程成功"
else
    echo "从本地复制到远程失败"
    exit 1
fi
 
#删除backup_home下超过7天的zip文件
find ${backup_home} -mtime +7 -name "*.zip" -exec rm -rf {} \;

这是一个可执行的sh文件。注意:该文件创建后,需要用chmod对此文件授权为“可执行文件”,如下:

//test.sh 是文件名
chmod +x test.sh

2、安装sshpass

yum install sshpass

3、将sh命令文件加入crontab的运行周期

//添加周期性任务
crontab -e

//进入编辑状态
35 * * * * /home/admin/sd/test.sh >> /home/admin/backup_home/log.txt

//重启crontab
systemctl restart crond.service

4、对服务器互相传输文件动作进行授权。

 注意:这一步不能省略。否则,crontab执行任务时会因为未授权而传输文件失败。一定要先授权,再让crontab启动备份任务。

成果展示:

猜你喜欢

转载自blog.csdn.net/yx1166/article/details/132323107
今日推荐