Как определить, загружен ли файл по FTP

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

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

Есть ли способ обнаружить и немедленно сообщить о прибытии файла?

0

Решение

создайте файл checker.sh и запустите его в фоновом режиме ./checker.sh / dev / null 2>&1 & или запустить его на экране

#!/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
1

Другие решения

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

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

2

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

#!/bin/bash
while true
do
inotifywait -e create /home/myuser/upload_dir/ && php /home/myuser/scripts/process_file.php
done
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector