Я запускаю следующую команду каждые 5 минут в моем crontab, чтобы поддерживать Phusion Passenger.
*/5 * * * * wget mysite.com > /dev/null 2>&1
Когда я запускаю это, он выполняет wget на сайте, направляя STDOUT / STDERR в / dev / null. Когда я запускаю это из командной строки, он работает нормально и не создает файл index.html в моем домашнем каталоге.
Когда он запускается из cron, он каждые пять минут создает новый файл index.html, оставляя мне кучу файлов индекса, которые мне не нужны.
Мой синтаксис неверен для запуска задания cron? Из командной строки это работает без проблем, но из cron генерирует файл index.html в моем домашнем каталоге.
Я уверен, что делаю простую ошибку, был бы признателен, если бы кто-нибудь мог помочь.
wget
с терминала и другим способом заключается в том, отображается ли индикатор выполнения.Ответы:
Вы можете сделать это так:
Здесь
-O
отправляет загруженный файл/dev/null
и-o
регистрируется/dev/null
вместо stderr. Таким образом, перенаправление вообще не нужно.источник
Вам действительно нужно загрузить содержимое или просто получить 200 OK? Если вам нужно, чтобы сервер обработал запрос, почему бы просто не использовать
--spider
аргумент?источник
Я бы использовал следующее:
-O -
Вариант гарантирует , что извлеченное содержание отправить на стандартный вывод.источник
foo > /dev/null 2>&1
более кратко написано какfoo &> /dev/null
.bash
. Вsh
, который обычно используется cron, перенаправление амперсанда не работает.Вы говорите, что вам нужен только ответ "200 OK" в комментарии.
Это позволяет найти решение с некоторыми дополнительными преимуществами по сравнению с
wget -O /dev/null -o /dev/null example.com
. Идея не в том, чтобы отбросить вывод каким-либо образом, но вообще не создавать вывод.То, что вам нужен только ответ, означает, что данные, загружаемые в локальный файл index.html, не нужно загружать в первую очередь.
В протоколе HTTP команда «GET» используется для загрузки документа . Для доступа к документу способом, который делает все, кроме фактической загрузки документа, существует специальная команда «HEAD».
При использовании «GET» для этой задачи документ загружается и удаляется локально. Использование «HEAD» делает именно то, что вам нужно, оно не передает документ в первую очередь. Он всегда будет возвращать тот же код результата, что и GET по определению.
Синтаксис использования метода
HEAD
сwget
немного странным: мы должны использовать опцию--spider
. В этом контексте он просто делает то, что мы хотим - получить доступ к URL с помощью «HEAD» вместо «GET».Мы можем использовать опцию
-q
(quiet), чтобыwget
не выводить подробности о том, что она делает.Сочетание этого не
wget
приведет ни к выводу чего-либо в stderr, ни к сохранению документа.wget -q --spider 'http://example.com/'
Код выхода сообщает нам, был ли запрос успешным или нет:
Для команды in
crontab
тот факт, что в обоих случаях нет выходных данных, означает, что вы можете использовать получение отсутствия выходных данных как указание на ошибки снова.Ваш пример команды будет изменен на это:
Это имеет те же преимущества, что и
wget -O /dev/null -o /dev/null example.com
. Дополнительным преимуществом является то, что вывод журнала и вывод документа не генерируются, а генерируются и отбрасываются локально. Или, конечно, большая разница в том, чтобы не загружать, а затем отбрасывать документindex.html
.источник
Пусть ваш вопрос должен быть по этому поводу, веб-страница говорит:
Это не должно требовать никаких сценариев keepalive.
В противном случае решение Касперда идеально.
источник
wget
команды поддерживают в живых . Во многих ситуациях необходимость поддерживать сообщения в актуальном состоянии является признаком основного недостатка проекта, который следует устранить. Но даже если все они исправлены, все равно останется несколько случаев, когда сообщение поддержания активности является правильным решением. Даже если сообщения поддержания активности не нужны, задание cron может быть полезной частью настройки мониторинга.