我有一个脚本,用于cron
创建 MySQL 数据库和一些文件的备份。创建 tar 包并用 加密后,openSSH
我必须将其放在远程 ftp 服务器上。以下是 ftp 部分的代码:
HOST='abcd.dyndns.biz'
USER='username'
PASSWD='password'
FILE='myBack-'${LOCAL_HOST}'-'${DATENAME}'.enc.tar.gz'
DIRNAME='/usr/local/backups/'
cd ${DIRNAME}
ftp -n ${HOST} <<END_SCRIPT
quote USER ${USER}
quote PASS ${PASSWD}
cd backup
lcd ${DIRNAME}
put ${FILE}
quit
END_SCRIPT
如果我直接从命令行运行脚本,> sudo ./mybackup.sh
它会顺利运行并将备份文件放在 ftp 上,但当它从命令行运行时,它cron
永远不会将文件放在 ftp 上,尽管其他 ftp 前和 ftp 后步骤(如合并日志文件和通过电子邮件发送结果)工作正常。我也无法从任何日志文件中获得任何信息,也无法查明原因。
注意:- 由于我们已经付费计划,因此我们的 dyndns.biz ip 不会改变。
答案1
使用卷曲的上传功能:
curl --upload-file "$FILE" --user "$USER:$PASSWD" "ftp://$HOST/backup/"
答案2
嗯.. 我看到了几个可能导致它失败的原因。
- 当您发送输入时,您不知道 ftp 已经打开了连接,但也许它会为您处理这个问题(我不熟悉您的 ftp 程序.. 据我所知它可能是任何东西)。
你没有用分号或换行符分隔 ftp:// 命令 - 尝试添加 \n 或 ;。同样,我不知道你的应用程序想要什么
- 如果你的应用无法批量从 sdtin 获取输入,请获取expect(自动化交互式应用程序的工具)。您的包管理器中很可能有一个它的二进制文件。
在尝试放置文件之前,您没有检查该文件是否确实存在。
答案3
我遇到了类似的问题。对我来说,解决方案是:直接引用没有变量的目录,如下所示:
lcd /mpla/mpla2/dir1
cd /mpla3/mpla4/dir2
并且成功了。只有这个变化。quote USER $username
和 quote PASSWD $password
保持原样,但没有花括号。