我需要将数据从专用服务器备份到文件服务器,并找到了这篇文章:https://www.arubacloud.com/tutorial/how-to-make-an-automatic-backup-of-the-server -通过-sftp.aspx到云
我对脚本和服务器总体来说还很陌生,所以请直接跟我说。 我在服务器上运行 Debian 12 并安装了 Pterodactyl Server 面板。 我想备份各个服务器并压缩文件。
我按照文章中的步骤操作,但由于某种原因它不起作用,但我也没有收到错误。
我的backupscriptpt1.sh脚本:
sudo zip backup_$(date +"%m_%d_%Y").zip /var/lib/pterodactyl/volumes/b41c4156-3a31-4c53-9bd7-adcf18e8ae4d
sudo sshpass -p 'REDACTED' sftp REDACTED@REDACTED:/home/playtest_1 <<<$'put backup_'$(date +"%m_%d_%Y")'.zip'
#sudo rm -r /path/backup_$(date +"%m_%d_%Y").zip
我测试了文件夹是否正确,它显示了我要备份的服务器中的所有文件。
当我像这样执行脚本时:
./backupscriptpt1.sh
它给了我这个输出:
root@Debian-bookworm-latest-amd64-base / # ./backupscriptpt1.sh
updating: var/lib/pterodactyl/volumes/b41c4156-3a31-4c53-9bd7-adcf18e8ae4d/ (stored 0%)
root@Debian-bookworm-latest-amd64-base / #
它不会生成 .zip 文件,也不会将 zip 文件发送到我的备份服务器。
有谁知道为什么这不起作用吗?
(正如你可能看到的,我正在尝试备份翼龙服务器。翼龙正在使用 docker,这可能是问题所在吗?)
您的备份脚本存在一些潜在问题,可能会导致其无法按预期工作:
Zip 命令路径:当您使用
zip
而不指定完整路径(/usr/bin/zip
)时,由于 PATH 设置或权限不同,可能会在脚本的执行环境中找不到它。为了确保找到它,请指定 zip
的完整路径。
工作目录:确保您的脚本从
/var/lib/pterodactyl/volumes/b41c4156-3a31-4c53-9bd7-adcf18e8ae4d
所在的正确工作目录运行。如果没有,请在脚本中提供目录的绝对路径。
SSH 连接:默认情况下,您的 Debian 服务器上可能未安装
sshpass
命令。如果缺少,请使用 apt install sshpass
安装它。
SSH 身份验证:出于安全原因,通常不建议使用
sshpass
和明文密码。请考虑为您的 SFTP 连接设置基于 SSH 密钥的身份验证。
命令执行顺序:在尝试通过 SFTP 传输 zip 文件之前,请确保
zip
命令已完成。 <<<$'put ...'
语法可能无法按预期工作;相反,请使用正确的 SFTP 命令行或脚本来传输文件。
这是脚本的更新版本,进行了一些改进:
#!/bin/bash
# Define variables
BACKUP_DIR="/var/lib/pterodactyl/volumes/b41c4156-3a31-4c53-9bd7-adcf18e8ae4d"
BACKUP_FILE="backup_$(date +"%m_%d_%Y").zip"
REMOTE_USER="REDACTED"
REMOTE_HOST="REDACTED"
REMOTE_DIR="/home/playtest_1"
# Ensure zip is found and create the backup archive
/usr/bin/zip "$BACKUP_FILE" "$BACKUP_DIR"/*
# Transfer the backup file using SFTP (replace sshpass with key-based auth for security)
sftp -oBatchMode=no -b - "$REMOTE_USER@$REMOTE_HOST" << EOF
put "$BACKUP_FILE" "$REMOTE_DIR/$BACKUP_FILE"
quit
EOF
# Clean up (uncomment if you want to remove the local backup file after transfer)
# rm "$BACKUP_FILE"
zip
的路径:确保/usr/bin/zip
正确;如有必要,请根据您的系统配置进行调整。$BACKUP_DIR/*
) 确保 zip
包含备份中的所有文件。sftp
进行文件传输,确保语法正确(此处文档中的put
命令)。rm "$BACKUP_FILE"
。确保在这些调整后再次测试脚本。如果问题仍然存在,请检查系统日志(
/var/log/syslog
、/var/log/auth.log
)是否有任何相关错误消息,这些消息可能会进一步了解问题所在。