У меня есть клиент, который загружает файл XML в каталог на моем сервере, используя сторонний скрипт, который я не контролирую. После загрузки файл обрабатывается php-скриптом.
У меня есть cronjob, который проверяет каталог каждый час, чтобы увидеть, был ли загружен файл, но если загрузка происходит, скажем, в 15:01, он не будет обработан до 16:00. Мой хост запрещает запускать cronjob чаще, чем раз в час.
Есть ли способ обнаружить и немедленно сообщить о прибытии файла?
создайте файл 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
Короткий ответ — да, возможно обнаружить загрузку файла и выполнить немедленное действие. Однако это не то, что я бы назвал «простым» решением. Вы хотели бы установить своего рода демона, чтобы вы могли постоянно запускать PHP (или использовать другой язык полностью, чтобы отслеживать файл).
Простое решение состоит в том, чтобы уменьшить интервал cron, а затем просто добавить некую механику анти-стекирования (например, файл блокировки), чтобы убедиться, что ваш скрипт не выполняется, если он уже запущен.
Если вы работаете в Linux, вы можете посмотреть на команду inotifywait, которая является частью пакета inotify-tools. Это можно настроить для ожидания создания файла в определенном каталоге следующим образом:
#!/bin/bash
while true
do
inotifywait -e create /home/myuser/upload_dir/ && php /home/myuser/scripts/process_file.php
done