备份远端服务器的数据
2019年02月19日

概述

需要备份下远端服务器的某些文件,把流程记录了下来,方便以后备查

操作流程

  1. 安装fcron(以gentoo为例)
emerge fcron
  1. 启动fcron服务(以systemd为例)
    注意系统时间是否正确timedatectl命令,查看
systemctl enable fcron
systemctl start fcron
  1. 挂载备份文件夹
mount ip:/path/of/directory /path/of/backup
  1. 编写脚本
vim backup.sh
#!/bin/bash
# 一定注意最后的斜杠
dbPath="username@hostname:/path/of/data/"
backupPath="/path/of/backup/"
tstamp=$(date '+%Y%m%d_%H%M%S')

curPath="${backupPath}${tstamp}"

mkdir -p ${curPath}
rsync --progress -rvze "ssh -p 2333 -i /path/of/id_rsa" ${dbPath} ${curPath}
echo "backup completed! path:${curPath}"

使用rsync的好处在于,rsync支持-e参数,附加ssh命令参数.
由于ssh使用密钥验证,如果采用scp,有些主机需要先使用ssh-agent bash,才可以通过ssh-add id_rsa的方式添加密钥文件,但是在cron执行的时候,会单独创建bash子进程,这又忽略了agent的存在,修复方法涉及把本机的ssh环境变量赋值给cron才可以,比较繁琐,所以还是采用ssh -i id_rsa username@host的方式直接连接更为方便.
5. 测试脚本

bash backup.sh
  1. 增加计划任务
fcrontab -e
10 5 * * * /path/of/backup.sh > /path/of/log

05:10执行任务

此流程一定要保证3点:

  1. fcron服务的运行
  2. 备份目录必须确实有效(远程目录,先挂载)
  3. ssh key文件比较存在并有效
  4. 如果采用主机名方式,确保主机名已经在/etc/hosts文件里做了映射