Судя по всему, передача -gtk — это какая-то графическая программа, которую вы желаете запустить? В этом случае вам нужно указать cron, на каком дисплее его запускать. Попробуйте это в своем crontab перед вашей строкой (, предполагая, что вы используете дисплей 0):
export DISPLAY=:0
У вас также должны быть сообщения об ошибках в вашей почте (вероятно /var/mail/username ). Это расскажет нам больше о проблеме.
Скорее всего, проверяется размер файла и/или время создания, чтобы узнать, был ли файл изменен, если только вы не укажете, какие файлы копировать.
Небольшая часть руководства по LFTP:
--ignore-time ignore time when deciding whether to download
--ignore-size ignore size when deciding whether to download
--only-missing download only missing files
--only-existing download only files already existing at target
-n, --only-newer download only newer files (-c won't work)
--upload-older upload even files older than the target ones
--transfer-all transfer all files, even seemingly the same at the
target site
lftp не выполняет проверку целостности содержимого файла (, например хэш )при сравнении файлов. Это важно знать при обеспечении целостности загружаемых файлов.
Впервые я заподозрил это, когда имел дело с поврежденной загрузкой и заметил, что команда mirror
выполняется слишком быстро для выполнения хеширования. Затем я подтвердил, проверив исходный код lftp. В частности :метод FileInfo::SameAs
обрабатывает этот(последний src на github (, вставленный ниже )).
bool FileInfo::SameAs(const FileInfo *fi,int ignore) const
{
if(defined&NAME && fi->defined&NAME)
if(strcmp(name,fi->name))
return false;
if(defined&TYPE && fi->defined&TYPE)
if(filetype!=fi->filetype)
return false;
if((defined&TYPE && filetype==DIRECTORY)
|| (fi->defined&TYPE && fi->filetype==DIRECTORY))
return false; // can't guarantee directory is the same (recursively)
if(defined&SYMLINK_DEF && fi->defined&SYMLINK_DEF)
return (strcmp(symlink,fi->symlink)==0);
if(defined&DATE && fi->defined&DATE && !(ignore&DATE))
{
time_t p=date.ts_prec;
if(p<fi->date.ts_prec)
p=fi->date.ts_prec;
if(!(ignore&IGNORE_DATE_IF_OLDER && date<fi->date)
&& labs(date-fi->date)>p)
return false;
}
if(defined&SIZE && fi->defined&SIZE && !(ignore&SIZE))
{
if(!(ignore&IGNORE_SIZE_IF_OLDER && defined&DATE && fi->defined&DATE
&& date<fi->date)
&& (size!=fi->size))
return false;
}
return true;
}
Просмотрев это, вы увидите, что lftp пытается проверить следующее:
Но даже этим проверкам нельзя полностью доверять, потому что они просто пропускаются, если что-то возвращается как неопределенное.
Если вам повезет, хост FTP предоставит текстовый файл с хэшами контрольной суммы, чтобы вы могли проверить загруженный контент. Мне не повезло и пришлось полностью перекачивать.