2014-11-29 7 views
0

У меня есть клиент, который загружает XML-файл в каталог на моем сервере, используя сторонний скрипт, над которым у меня нет контроля. После загрузки файл обрабатывается скриптом php.Как определить, загружен ли файл FTP

У меня есть cronjob, который проверяет каталог каждый час, чтобы узнать, был ли загружен файл, но если загрузка происходит, скажем, в 3:01 вечера, он не будет обработан до 4:00 вечера. Мой хозяин запрещает работать cronjob чаще, чем один раз в час.

Есть ли способ обнаружить и сообщить сразу после поступления файла?

+0

уменьшить интервал cron. если задача в cron тяжелая, создайте другой cron. Я не могу думать ни о чем другом :) – Jigar

+0

Можете ли вы предоставить больше информации m, Как файл обновлен через сервер? Использует ли он ftp или ..? –

+0

попробуйте torun скрипт bash, который запускает скрипт, который его проверяет, вы можете запустить его в backgroudn, перенаправляя входной вывод с помощью: ./checker.sh/dev/null 2> &, и в checker.sh цикл и сон, и проверьте если существует fiekl –

ответ

1

сделать файл checker.sh, и запустить его в фоновом режиме ./checker.sh/DEV/нуль 2> , или запустить его в окне

#!/bin/bash 

COUNTER=0 
while [ $COUNTER -lt 99999 ]; do 

if [ -f "/path/to/your/file" ]; then 
    #do action here ,run a script a program etC#the file is there 
fi 

sleep 5 
let COUNTER=COUNTER+1 

done 
+0

Это решение, за которое я пошел, но в php. Задача cron запускается каждый час и спит в течение 60 секунд в цикле «для». –

2

Короткий ответ: да, можно обнаружить загрузку файла и выполнить немедленное действие. Однако это не то, что я бы назвал «простым» решением. Вы бы хотели создать какой-то демон, чтобы вы могли run PHP continually (или использовать другой язык для мониторинга файла).

Простое решение - снизить интервал cron, а затем просто добавить какой-то антистакерный механизм (например, файл блокировки), чтобы убедиться, что ваш скрипт не выполняется, если он уже запущен.

0

Если вы работаете в Linux вы могли посмотрите на команду inotifywait, которая является частью пакета inotify-tools. Это можно настроить, чтобы подождать, пока файл не будет создан в определенном каталоге следующим образом:

#!/bin/bash 
while true 
do 
inotifywait -e create /home/myuser/upload_dir/ && php /home/myuser/scripts/process_file.php 
done 
+0

При попытке установить inotify я получил разрешение на установку разрешения. Я на общем сервере Unix, возможно, поэтому. –

Смежные вопросы