我想使用 ftp 将备份档案从一台服务器上传到另一台服务器。在我的备份 cronjob 中,我使用此脚本上传文件:
MEDIAFILE=/var/somedir/somefile.encrypted
if [ -r $MEDIAFILE ]
# File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
put $MEDIAFILE
quit
END_SCRIPT
fi
该脚本返回:/var/somedir/somefile.encrypted:没有此文件或目录。但该文件存在,并且执行脚本的用户有权限读取该文件。
导致此错误的原因是什么?
答案1
好吧,我应该首先这样做:
FTPHOST="domain.com"
FTPUSER="xxxxxx"
FTPPASS="xxxxxxxxx"
MEDIAFILE=/path/to/something.enc
if [ -r $MEDIAFILE ]
# File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
bin
put $MEDIAFILE something.enc
quit
END_SCRIPT
fi
我添加了要放置的远程文件名和 bin 命令 - 经过测试并且有效 - 希望它能有所帮助。
编辑:我应该解释一下 - 如果未指定远程路径(第二个参数),put 命令将假定远程路径与本地路径相同 - 因此如果没有远程路径,则无法在远程服务器上找到该文件。
答案2
为变量赋值时不应使用美元符号。因此,请尝试以下代码:
MEDIAFILE="/var/somedir/somefile.encrypted"
if [ -r $MEDIAFILE ]; # File seems to exist and is readable
then
ftp -n $FTPHOST <<END_SCRIPT
quote USER $FTPUSER
quote PASS $FTPPASS
cd backups
put $MEDIAFILE
quit
END_SCRIPT
fi