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启动备份任务。
成果展示: