Избегайте создания нескольких файлов с помощью wget

3

я использую wget вызывать ссылку каждые 10 секунд следующим образом:

#/bin/sh
while true; do
    wget http://www.some.random.link/to/some/PHP/script
    sleep 10
done

Это производит пустые файлы с именем script_name.# где # увеличивается при каждом запуске.

Почему это происходит?

Katafalkas
источник

Ответы:

5

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

Есть несколько вариантов, как это предотвратить.

  1. Запретить загрузку wget вообще, используя --spider опция:
    wget --spider http://www.some.random.link/to/some/PHP/script
    Тем не менее, это может привести к тому, что ваш скрипт не будет работать, так как, IIRC, он только выдает HEAD запрос.
  2. Загрузите вывод, но отмените его, отправив /dev/null:
    wget -O /dev/null http://www.some.random.link/to/some/PHP/script
  3. Загрузите вывод, но затем удалите, используя --delete-after опция:
    wget --delete-after http://www.some.random.link/to/some/PHP/script
  4. Для полноты, если вы можете жить с одним файлом, используйте -nc возможность запретить загрузку wget файлов, которые уже существуют локально:
    wget -nc http://www.some.random.link/to/some/PHP/script
Indrek
источник
1

В качестве альтернативы вы можете избежать использования wget - который, как следует из его названия, предназначен для получение веб-контент с данного URL. Другими словами, он создан, чтобы быть инструментом «загрузки». (Это, конечно, очень гибко, как продемонстрировал Индрек в своем ответе. Но его настройки по умолчанию работают против ваших целей.)

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

Итак, замена wget с curl в приведенном выше коде следует исправить проблему создания файла без дальнейшей работы.

FeRD
источник
конкретно curl --silent <address> 1>/dev/null сделаю работу.
Daniel Andersson
Как правило, да, это позволило бы curl работать без вывода сообщений независимо от извлекаемого содержимого. Однако в данном случае это даже не нужно, поскольку удаленный сервер ничего не выводит (wget «загружал» пустые файлы), и curl чудесно не выводится, если что-то идет не так или если данные не получены. Вот что сделало локон настолько идеально подходящим для данного конкретного приложения.
FeRD