Zatím jsem nic pořádně nenašel, ale je pravda, že curl
ve skutečnosti vůbec nevyprší časový limit?
[email protected]:~# curl http://localhost/testdir/image.jpg
Ptám se, protože přesměruji jakýkoli požadavek na obrázky v testdir
do samostatného modulu Apache, který tyto obrázky generuje za běhu. Než bude obrázek skutečně připraven a doručen žádajícímu klientovi, může to trvat až 15 minut.
curl
vždy čekat (nebo to závisí na konfiguraci) nebo existuje nějaký časový limit?
Přijatá odpověď:
Ano.
Parametry časového limitu
curl
má dvě možnosti:--connect-timeout
a --max-time
.
Citace z manuálové stránky:
--connect-timeout <seconds>
Maximum time in seconds that you allow the connection to the
server to take. This only limits the connection phase, once
curl has connected this option is of no more use. Since 7.32.0,
this option accepts decimal values, but the actual timeout will
decrease in accuracy as the specified timeout increases in deci‐
mal precision. See also the -m, --max-time option.
If this option is used several times, the last one will be used.
a:
-m, --max-time <seconds>
Maximum time in seconds that you allow the whole operation to
take. This is useful for preventing your batch jobs from hang‐
ing for hours due to slow networks or links going down. Since
7.32.0, this option accepts decimal values, but the actual time‐
out will decrease in accuracy as the specified timeout increases
in decimal precision. See also the --connect-timeout option.
If this option is used several times, the last one will be used.
Výchozí
Zde (v Debianu) se přestane pokoušet o připojení po 2 minutách, bez ohledu na čas zadaný pomocí --connect-timeout
a ačkoli se zdá, že výchozí hodnota časového limitu připojení je 5 minut podle DEFAULT_CONNECT_TIMEOUT
makro v lib/connect.h.
Výchozí hodnota pro --max-time
Zdá se, že neexistuje, takže se curl
čekat navždy na odpověď, pokud bude počáteční připojení úspěšné.
Co použít?
Pravděpodobně vás zajímá druhá možnost, --max-time
. Pro váš případ jej nastavte na 900
(15 minut).
Zadání možnosti --connect-timeout
na něco jako 60
(jedna minuta) může být také dobrý nápad. V opačném případě curl
se pokusí připojit znovu a znovu, zřejmě pomocí nějakého backoff algoritmu.