Назад | Перейти на главную страницу

Передача вывода wget в / dev / null в cron

Я запускаю следующую команду каждые 5 минут в своем crontab, чтобы поддерживать Phusion Passenger в живых.

*/5 * * * * wget mysite.com > /dev/null 2>&1

Когда я запускаю это, он выполняет wget на URL-адресе сайта, направляет STDOUT / STDERR в / dev / null. Когда я запускаю его из командной строки, он отлично работает и не создает файл index.html в моем домашнем каталоге.

Когда он запускается из cron, он создает новый файл index.html каждые пять минут, оставляя мне массу индексных файлов, которые мне не нужны.

Мой синтаксис неверен для выполнения задания cron? Из командной строки он работает без проблем, но из cron он генерирует файл index.html в моем домашнем каталоге.

Я уверен, что делаю простую ошибку, был бы признателен, если бы кто-нибудь мог помочь.

Сделать это можно так:

*/5 * * * * wget -O /dev/null -o /dev/null example.com

Вот -O отправляет загруженный файл в /dev/null и -o журналы в /dev/null вместо stderr. Таким образом, перенаправление вообще не нужно.

Вам действительно нужно загрузить содержимое или просто получить 200 OK? Если вам нужно, чтобы сервер обрабатывал запрос, почему бы просто не использовать --spider аргумент?

Я бы использовал следующее:

/5 * * * * wget -O - mysite.com > /dev/null 2>&1

В -O - опция гарантирует, что полученный контент будет отправлен на стандартный вывод.

Вы говорите, что вам нужен только ответ «200 OK» в комментарии.

Это позволяет получить решение с некоторыми дополнительными преимуществами по сравнению с
wget -O /dev/null -o /dev/null example.com. Идея состоит не в том, чтобы каким-либо образом отбрасывать выходные данные, а в том, чтобы не создавать их вообще.

То, что вам нужен только ответ, означает, что данные, которые загружаются в локальный файл index.html, не нужно загружать в первую очередь.
В протоколе HTTP команда GET используется для скачать документ. Чтобы получить доступ к документу таким образом, чтобы Кроме собственно при загрузке документа есть специальная команда «ГОЛОВКА».
При использовании «GET» для этой задачи документ загружается и удаляется локально. Использование «HEAD» делает именно то, что вам нужно, оно не переносит документ в первую очередь. Он всегда будет возвращать тот же код результата, что и GET по определению.

Синтаксис для использования метода HEAD с участием wget немного странно: нам нужно использовать опцию --spider. В этом контексте он просто делает то, что мы хотим - доступ к URL-адресу с помощью «HEAD» вместо «GET».
Мы можем использовать опцию -q (тихо) сделать wget не выводить подробности о том, что он делает.

Объединяя это, wget не будет ни выводить ничего в stderr, ни сохранять документ.

wget -q --spider 'http://example.com/'

Код выхода сообщает нам, был ли запрос успешным или нет:

$ wget -q --spider 'http://example.com/'
$ echo $?
0
$ wget -q --spider 'http://example.com/nonexisting'
$ echo $?                                          
8

Для команды в crontab, тот факт, что в обоих случаях нет вывода, означает, что вы можете снова использовать отсутствие вывода как указание на ошибку.

Ваш пример команды будет изменен на это:

*/5 * * * * wget -q --spider mysite.com

Это имеет те же преимущества, что и wget -O /dev/null -o /dev/null example.com. Дополнительным преимуществом является то, что вывод журнала и вывод документа не генерируются, а генерируются и удаляются локально. Или, конечно, большая разница в том, чтобы избежать загрузки, а затем выбросить документ, index.html.

чтобы сохранить жизнь Phusion Passenger.

Возможно, ваш вопрос должен быть об этом, на веб-странице говорится:

Быстрый и надежный веб-сервер и сервер приложений для

Для этого не должны требоваться скрипты поддержки активности.

В остальном решение касперда идеально.