从 cron 运行的 bash 脚本的 FTP 不起作用

从 cron 运行的 bash 脚本的 FTP 不起作用

我有一个脚本,用于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

嗯.. 我看到了几个可能导致它失败的原因。

  1. 当您发送输入时,您不知道 ftp 已经打开了连接,但也许它会为您处理这个问题(我不熟悉您的 ftp 程序.. 据我所知它可能是任何东西)。
  2. 你没有用分号或换行符分隔 ftp:// 命令 - 尝试添加 \n 或 ;。同样,我不知道你的应用程序想要什么

  3. 在尝试放置文件之前,您没有检查该文件是否确实存在。

答案3

我遇到了类似的问题。对我来说,解决方案是:直接引用没有变量的目录,如下所示:

lcd /mpla/mpla2/dir1
cd  /mpla3/mpla4/dir2

并且成功了。只有这个变化。quote USER $usernamequote PASSWD $password保持原样,但没有花括号。

相关内容