Jak używać curl w zadaniu cron?

12

Muszę skonfigurować zadanie crona w cpanelu, które wywołuje URL (na tym samym serwerze) raz w tygodniu. Chciałem użyć wget, ale okazuje się, że jest wyłączone na używanym serwerze współdzielonym.

Czy istnieje alternatywa dla wget ? Słyszałem, że można użyć curl, ale nie wiem, jak to ustawić w poleceniu cron.

Jaka jest też komenda, aby cronjob nic nie robił po zakończeniu?

Wszelkie pomysły bardzo mile widziane!

dawidyland
źródło
1
Co zrobiłby wget, gdybyś mógł go użyć?
user9517,
Dlaczego mieliby pozwalać na zwijanie się, gdyby wyłączili wget?
andol
@Iain - jest potrzebny do przetworzenia skryptu PHP
davidhyland
@Andol - bardzo dobre pytanie. tak właśnie jest
davidhyland

Odpowiedzi:

20

zamiast używania wget, curl działa w następujący sposób:

curl --silent http://domain.com/cron.php

który będzie działał w taki sam sposób jak wget. jeśli jest to plik php, który uruchamiasz, to czy jest jakiś powód, dla którego nie możesz go uruchomić za pomocą interpretera php z wiersza poleceń:

php -q /path/to/cron.php

to samo na żądanie serwera WWW i często będzie działać znacznie szybciej i bez pewnych ograniczeń czasu oczekiwania, gdy zostanie wywołany przez serwer WWW / curl

anthonysomerset
źródło
Wywołanie curl w ten sposób spowoduje wydrukowanie wyniku na standardowe wyjście. Jeśli chcesz zachowywać się tak samo jak wget i zapisać dane wyjściowe w nazwie pliku na podstawie adresu URL, chcesz również dodać flagę --remote-name.
andol
czy --silent oznacza, że ​​nie ma odpowiedzi ani wyjścia?
davidhyland
1
Wywołanie skryptu php z wiersza poleceń niekoniecznie musi dać ten sam wynik. Oprócz możliwości innej konfiguracji istnieje również nierzadki scenariusz uruchamiania skryptu w ten sposób jako inny użytkownik. Wszystko zależy od konfiguracji.
andol
Cóż, mam go do pracy przy użyciu „curl -silent domain.com/script.php > / dev / null 2> & 1”, ale działa również dobrze z „curl -o --url domain.com/script.php > / dev / null 2> & 1 "jaka jest różnica?
dawidyland
1
Pierwsze polecenie wysyła wszystkie dane wyjściowe do / dev / null, drugie utworzy plik wywoływany -urlw katalogu osobistym użytkownika uruchamiającego skrypt, który zawiera dane wyjściowe pliku php, wszystkie pozostałe dane wyjściowe są przekazywane do / dev / null.
user9517,
6

Jeśli curl jest dostępny, możesz spróbować czegoś takiego

1 1 * * 0  /usr/bin/curl --silent http://example.come/some.php &>/dev/null

To powinno spowodować, że curl będzie całkowicie cichy, więc po zakończeniu nie otrzymasz od niego żadnej wiadomości e-mail.

użytkownik9517
źródło
4
Poleciłbym również użycie opcji --show-error, więc jest cichy dla normalnej pracy, ale spowoduje błąd, jeśli tak się stanie.
emerino
6

Proponuję dodać parametr „-m” oprócz opcji --silent, ponieważ parametr ten określa maksymalny dozwolony czas przesyłania. Wyobraź sobie, że wywołujesz crona co minutę, a skrypt zajmuje 2 minuty - może to mieć zły wpływ na obciążenie serwera lub inne rzeczy.

1 1 * * 0  /usr/bin/curl -m 120 -s http://example.come/some.php &>/dev/null
Johnny Vietnam
źródło