FTP из bash-скрипта, запущенный из cron, не работает

У меня есть скрипт, который запускается 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 и post-ftp (такие как объединение файла журнала и результаты отправки по электронной почте), работают нормально. Я не могу получить что-либо из каких-либо файлов журналов или определить причину.

ПРИМЕЧАНИЕ:- Наш ip dyndns.biz не меняется, так как мы оплатили тарифный план.

3 ответа

Решение

Вместо этого используйте функцию загрузки Curl:

curl --upload-file "$FILE" --user "$USER:$PASSWD" "ftp://$HOST/backup/"

У меня была похожая проблема. Решение для меня: обращаться непосредственно к каталогам без переменных, например:

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

и это сработало. Только это изменение. quote USER $username а также quote PASSWD $password остались как есть но без фигурных скобок.

Хм.. Я вижу несколько моментов, почему это может потерпеть неудачу.

  1. вы не знаете, что ftp открыл соединение при отправке ввода, но, возможно, он позаботится об этом за вас (я не знаком с вашей программой ftp.. это может быть что угодно).
  2. Вы не разделяете свои команды ftp:// точками с запятой или символом новой строки - попробуйте добавить \n или;. снова ИДК, что хочет ваше приложение

  3. Вы не проверяете, что файл действительно существует, прежде чем пытаться его поместить.

Другие вопросы по тегам