Uruchamiam następujące polecenie co 5 minut na moim crontabie, aby utrzymać Phusion Passenger przy życiu.
*/5 * * * * wget mysite.com > /dev/null 2>&1
Kiedy go uruchomię, wykonuje on wget na adresie URL trasy STDOUT / STDERR do / dev / null. Kiedy uruchamiam to z wiersza poleceń, działa dobrze i nie tworzy pliku index.html w moim katalogu domowym.
Kiedy uruchamia się z crona, tworzy nowy plik index.html co pięć minut, pozostawiając mi mnóstwo plików indeksu, których nie chcę.
Czy moja składnia jest niepoprawna do uruchomienia zadania cron? Z wiersza poleceń działa bez problemu, ale z crona generuje plik index.html w moim katalogu domowym.
Jestem pewien, że popełniam prosty błąd, doceniłbym go, gdyby ktoś mógł pomóc.
wget
z terminala a innymi kwestiami jest to, czy wyświetlany jest pasek postępu.Odpowiedzi:
Możesz to zrobić w następujący sposób:
Tutaj
-O
wysyła pobrany plik/dev/null
i-o
loguje się do/dev/null
zamiast stderr. W ten sposób przekierowanie nie jest wcale potrzebne.źródło
Czy musisz pobrać zawartość, czy po prostu otrzymać 200 OK? Jeśli musisz tylko poprosić serwer o przetworzenie żądania, dlaczego po prostu nie użyjesz
--spider
argumentu?źródło
Użyłbym następujących:
Ta
-O -
opcja zapewnia, że pobrana zawartość jest wysyłana na standardowe wyjście.źródło
foo > /dev/null 2>&1
jest bardziej zwięźle napisane jakofoo &> /dev/null
.bash
. Wsh
, co zwykle używa cron, ampersand przekierowanie nie działa.Mówisz, że potrzebujesz tylko odpowiedzi „200 OK” w komentarzu.
Pozwala to na rozwiązanie z pewnymi dodatkowymi zaletami w stosunku do
wget -O /dev/null -o /dev/null example.com
. Chodzi o to, aby nie odrzucać wyników w jakikolwiek sposób, ale nie tworzyć żadnych wyników.To, że potrzebujesz tylko odpowiedzi, oznacza, że dane pobrane do lokalnego pliku index.html nie muszą być pobierane w pierwszej kolejności.
W protokole HTTP do pobrania dokumentu służy polecenie „GET” . Aby uzyskać dostęp do dokumentu w sposób, który robi wszystko oprócz faktycznego pobrania dokumentu, istnieje specjalne polecenie „HEAD”.
Podczas korzystania z polecenia „GET” do tego zadania dokument jest pobierany i odrzucany lokalnie. Używanie „HEAD” robi dokładnie to, czego potrzebujesz, nie przenosi dokumentu w pierwszej kolejności. Zawsze zwróci ten sam kod wyniku, co z definicji „GET”.
Składnia użyć metody
HEAD
zewget
to trochę dziwne: musimy użyć opcji--spider
. W tym kontekście robi to, co chcemy - uzyskuje się dostęp do adresu URL za pomocą „HEAD” zamiast „GET”.Możemy użyć opcji
-q
(ciche), abywget
nie wyświetlać szczegółowych informacji o tym, co robi.Łącząc to,
wget
nie wyprowadzi niczego do stderr ani nie zapisze dokumentu.wget -q --spider 'http://example.com/'
Kod wyjścia informuje nas, czy żądanie powiodło się, czy nie:
W przypadku polecenia in
crontab
fakt, że w obu przypadkach nie ma danych wyjściowych, oznacza, że możesz ponownie użyć braku danych jako wskaźnika błędów.Twoje przykładowe polecenie zostanie zmienione na:
Ma to takie same zalety jak
wget -O /dev/null -o /dev/null example.com
. Dodatkową zaletą jest to, że dane wyjściowe dziennika i dokumentu nie są generowane, zamiast generowane i odrzucane lokalnie. Lub oczywiście wielka różnica jest unikanie pobrać, a następnie odrzucić dokumentindex.html
.źródło
Niech twoje pytanie powinno dotyczyć tego, strona mówi:
Nie powinno to wymagać żadnych skryptów podtrzymujących działanie.
W przeciwnym razie rozwiązanie kasperda jest idealne.
źródło
wget
przykazania utrzymują przy życiu . W wielu sytuacjach potrzeba utrzymywania żywych komunikatów jest objawem podstawowej wady projektowej, którą należy naprawić. Ale nawet jeśli wszystkie zostaną naprawione, nadal pozostanie kilka przypadków, w których komunikat utrzymania przy życiu jest właściwym rozwiązaniem. Nawet jeśli komunikaty podtrzymywania aktywności nie są potrzebne, zadanie cron może nadal być użyteczną częścią konfiguracji monitorowania.