Трубопровід виводу wget до / dev / null в cron


38

Я виконую наступну команду кожні 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 у моєму домашньому каталозі.

Я впевнений, що роблю просту помилку. Буду вдячний, якщо хтось може допомогти.


1
Інше питання, чому це не створює файл, коли ви запускаєте його з командного рядка вручну. Наскільки я можу зрозуміти з документації, єдиною різницею між запуском wgetз терміналу та іншим є те, чи відображається панель прогресу.
Бармар

Відповіді:


61

Ви можете зробити це так:

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

Тут -Oвідправляється завантажений файл у /dev/nullі -oзаписує в /dev/nullжурнал замість stderr. Таким чином перенаправлення зовсім не потрібно.


1
Дякую, це пряміше, ніж перенаправлення на STDERR / STDOUT. Я ціную це.
nulltek

17

Чи потрібно фактично завантажити вміст або просто отримати 200 ОК? Якщо вам потрібно лише, щоб сервер обробив запит, чому б просто не використовувати --spiderаргумент?


Це гарна думка. Мені справді потрібна лише відповідь 200 ОК.
nulltek

Я сподівався, що хтось неупереджений це вкаже на це, але ... яке рішення ви в кінцевому підсумку використали? Моя відповідь дійсно правильний спосіб зробити це :)
Нахт - Відновіть Моніку

10

Я б використав наступне:

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

-O -Варіант гарантує , що вилучене зміст відправити на стандартний висновок.


4
Зауважте, що foo > /dev/null 2>&1більш стисло написано як foo &> /dev/null.
amalloy

3
@amalloy Тільки в bash. У sh, як правило, що використовується cron, перенаправлення амперсанд не працює.
Сов'єро

5

Ви кажете, що вам потрібна лише відповідь "200 ОК" у коментарі.

Це дозволяє вирішити деякі додаткові переваги перед тими, що мають
wget -O /dev/null -o /dev/null example.com. Ідея полягає в тому, щоб не відкидати вихід якимось чином, а взагалі не створювати жодного результату.

Що вам потрібна лише відповідь, значить, дані, які завантажуються в локальний файл index.html, не потрібно завантажувати в першу чергу.
У протоколі HTTP команда "GET" використовується для завантаження документа . Для доступу до документа таким чином, що робить все, крім фактичного завантаження документа, існує спеціальна команда "HEAD".
Під час використання "GET" для цього завдання документ завантажується та викидається локально. Використання "HEAD" робить саме те, що вам потрібно, воно не переносить документ в першу чергу. Він завжди поверне той самий код результату, що і "GET", за визначенням.

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

Поєднуючи це, wgetне буде виведено нічого складніше, ані збережеться документ.

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.


Мені також подобається такий підхід. Я ціную ваші відгуки та відповіді.
nulltek

3

щоб зберегти живого Пасажира Фьюзії.

Нехай ваше запитання має стосуватися цього, веб-сторінка говорить:

Швидкий і надійний веб-сервер і сервер додатків для

Для цього не потрібно ніяких сценаріїв збереження.

Інакше рішення касперду ідеально.


Дякуємо за відгук, хоча це не дуже конструктивно. Сервери прикладних програм не працюють, хоча зазвичай це не вина контейнера.
Фелікс Френк

1
Я погоджуюся, що це не повинно вимагати жодних кронштейнів, щоб зберегти його живим. Але це було швидко виправити, поки я досліджував налаштування Nginx / пасажирів. Дійсно просто шукав найкращий спосіб вивести в / dev / null. У мене не вийшло пасажира або висіло протягом 2 хвилин у той час, коли немає навантаження, тому запит на URL-адресу поки що пасажир звільняється.
nulltek

1
Було б добре зрозуміти, що це за те, що команди підтримують живими wget. У багатьох ситуаціях потреба у збереженні живих повідомлень є симптомом основної вади дизайну, яку слід виправити. Але навіть якщо все це буде виправлено, все одно залишиться кілька випадків, коли повідомлення про збереження живих - це правильне рішення. Навіть якщо зберігати живі повідомлення не потрібно, робота cron може все-таки стати корисною частиною налаштування моніторингу.
kasperd

Це було б краще як коментар, ніж відповідь.
moopet
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.