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
остались как есть но без фигурных скобок.
Хм.. Я вижу несколько моментов, почему это может потерпеть неудачу.
- вы не знаете, что ftp открыл соединение при отправке ввода, но, возможно, он позаботится об этом за вас (я не знаком с вашей программой ftp.. это может быть что угодно).
Вы не разделяете свои команды ftp:// точками с запятой или символом новой строки - попробуйте добавить \n или;. снова ИДК, что хочет ваше приложение
- Если выясняется, что ваше приложение не может получить данные от sdtin в пакете, получите ожидаемую (инструмент для автоматизации интерактивных приложений). Скорее всего, в вашем менеджере пакетов есть бинарный файл.
Вы не проверяете, что файл действительно существует, прежде чем пытаться его поместить.