Как насчет использования простого сценария для этого:
- Запускайте скрипт каждые 5 минут, если он уже не запущен.
- Проверьте возраст локального файла. Если он старше определенного порогового значения, загрузите его снова.
Так что, если все идет гладко, ничего не происходит, если файл не устарел.
Если файл устарел и его загрузка не удалась, вы можете повторить следующую итерацию.
Я не уверен, почему вы пометили это php
, но если вы на самом деле запускаете php-скрипт, такой подход довольно прост (если у вас включены веб-сокеты):
foreach($files as $file)
if (@filemdate($local_path + $file) + $cache_duration < time())
@copy($remote_path + $file, local_path + $file);
Обратите внимание, что $remote_path
действительно может быть URL-адресом HTTP или FTP. Нет необходимости вызывать wget. Символ @
предотвратит вывод сообщений об ошибках.
Чтобы доказать, что это не вызовет ненужного ожидания:
- Предположим, у вас есть 1000 файлов для загрузки, но вы можете загружать до 250 файлов в час.
- Установите для
cache_duration
время сохранения, при котором вы получите все файлы, например 24 часа (24 * 60 * 60
).
- Повторяйте сценарий выше один раз в час.
- Первая итерация первых 250 файлов будет обновлена. Другие потерпят неудачу.
- Во второй итерации первые 250 файлов будут пропущены (поскольку они достаточно свежие), а следующие 250 файлов будут загружены.
- После четвертой итерации все 1000 файлов будут обновлены / загружены.
- Конечно, вы можете установить более короткий интервал, например, 5 минут, но это создаст намного больше запросов / трафика (зависит от того, является ли это приемлемым).
Альтернативная идея сценария:
- Попробуйте скачать файл.
- Если это не удастся, вы сможете определить это на основе значения возврата / кода выхода wget. Так что в этом случае подождите 5 минут, затем повторите.