2016-02-16 5 views
1

Я написал сценарий bash для загрузки файлов с FTP-сервера.Bash Script для загрузки ftp-файлов

#!/bin/bash 
screen /usr/local/bin/wget ftp://user:[email protected]:/Folder/* 

Когда я запускаю этот скрипт вручную он работает, но когда я пытаюсь установить его автоматически делать это с хронами он не работает.

Cron:

00 17 * * * /Users/user/.Scripts/test.sh 

Любая идея, почему это не работает?

Я продолжаю получать эту почту слишком

X-Cron-Env: <SHELL=/bin/sh> 
X-Cron-Env: <PATH=/usr/bin:/bin> 
X-Cron-Env: <LOGNAME=user> 
X-Cron-Env: <USER=user> 
X-Cron-Env: <HOME=/Users/user> 
Date: Mon, 15 Feb 2016 19:12:00 -0600 (CST) 

Must be connected to a terminal. 

Я просто попытался с ш и что почта была то, что я получил.

+0

Попробуйте добавить 'sh' перед абсолютным путем test.sh – Rao

+0

Всегда ли нужно запускать в' screen'? Вам нужно видеть вывод на экране или нет? – Will

+0

Нет, но я подумал, что было бы здорово, если бы я вошел в систему, и он все еще работал, я мог проверить это. –

ответ

0

Измените сценарий к этому:

#!/bin/bash 

SCREEN_OPTS="" 
DOWNLOAD_DIR="." 

if [[ ! -t 1 ]]; then 
    SCREEN_OPTS="-d -m" 
    DOWNLOAD_DIR="/path/to/save/files" 
fi 


screen $SCREEN_OPTS /usr/local/bin/wget --directory-prefix="$DOWNLOAD_DIR" ftp://user:[email protected]:/Folder/* 

Таким образом, при работе с cron, screen будет работать в отдельном режиме и не требует терминала.

Выражение теста [[ -t 1 ]] вернет true (0), если сценарий запущен с терминала.

Вам также необходимо указать выходной каталог для wget, так как в противном случае он просто сохранит рабочий каталог cron.

+0

Мне пришлось немного изменить его. Мне пришлось поместить часть -directory-prefix после wget. Спасибо вам за помощь. Он работает сейчас. –

+0

Без проблем, рад помочь. И, к сожалению, вы правы, я это исправил. Просто последний минус: – Will