侧边栏壁纸
博主头像
James' Blog博主等级

行动起来,活在当下

  • 累计撰写 27 篇文章
  • 累计创建 35 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

用ChatGPT帮你写一个VPS定时自动备份脚本

Administrator
2022-11-26 / 0 评论 / 0 点赞 / 16 阅读 / 2088 字

写一个Linux自动备份脚本,把A服务器上的/root/data/docker_data文件夹的内容压缩之后每天早上4点30分自动备份到B服务器上的/root/data/backup目录下,要求最多保留3份备份。
其中B服务器的SSH端口为2222,B服务器上的/root/data/backup目录已经创建好了。

以下是一个可以完成所需任务的bash脚本。请将以下脚本保存为 backup.sh

sudo -i    # 切换到root用户

vim backup.sh   # 编辑back.sh文件

写入以下内容:

#!/bin/bash

# 服务器A上的源目录
SRC_DIR="/root/data/docker_data"

# 服务器B上的目标目录
DST_DIR="/root/data/backup"

# 服务器B的IP地址
SERVER_B_IP="your_server_b_ip"

# 服务器B的SSH用户名
SSH_USER="your_ssh_username"

# 服务器B的SSH端口
SSH_PORT="2222"

# 备份文件前缀
BACKUP_NAME_PREFIX="docker_data_backup"

# 压缩文件格式
ARCHIVE_FORMAT="tar.gz"

# 生成备份文件名
current_date=$(date +"%Y%m%d_%H%M%S")
backup_filename="${BACKUP_NAME_PREFIX}_${current_date}.${ARCHIVE_FORMAT}"

# 压缩源目录
tar -czf "${backup_filename}" -C "${SRC_DIR}" .

# 传输备份文件到服务器B
scp -P "${SSH_PORT}" "${backup_filename}" "${SSH_USER}@${SERVER_B_IP}:${DST_DIR}"

# 删除本地备份文件
rm -f "${backup_filename}"

# 保留最多3个备份文件
ssh -p "${SSH_PORT}" "${SSH_USER}@${SERVER_B_IP}" "ls -t ${DST_DIR}/${BACKUP_NAME_PREFIX}* | tail -n +4 | xargs --no-run-if-empty rm -f"

接下来,我们需要在服务器A上配置cron job以实现每天早上4点30分自动执行上面的备份脚本。请按照以下步骤操作:

  1. 使用chmod命令为脚本添加可执行权限:

    chmod +x backup.sh
    

    接下来,我们需要在A服务器上安装并配置SSH免密登录到B服务器。请在A服务器上执行以下命令:

    # 安装sshpass(如已安装,请忽略)
    sudo apt-get install sshpass
    
    # 生成SSH密钥
    ssh-keygen -t rsa -b 4096
    
    # 一路回车即可
    
    # 将公钥复制到B服务器
    ssh-copy-id -i ~/.ssh/id_rsa.pub -p 服务器端口 user@B服务器IP地址
    

    可以检测一下,A服务器直接用ssh -p 服务器端口 user@B服务器IP地址是否可以免密登录B服务器,如果可以,说明可以继续下一步。

  2. 使用crontab -e命令打开服务器A上的cron配置:

    crontab -e
    
  3. 在打开的cron配置文件中,添加以下一行内容以设置每天早上4点30分执行backup.sh脚本。请确保将/path/to/backup.sh替换为实际的脚本文件路径。

    30 4 * * * /root/backup.sh
    
  4. 保存并关闭cron配置文件。

    现在,每天早上4点30分,脚本将自动执行,并将/root/data/docker_data目录压缩备份到服务器B的/root/data/backup目录下,同时保留最多3份备份。

0

评论区