GNU/Linux >> Linux Esercitazione >  >> Linux

Il curl ha un timeout?

Finora non sono riuscito a trovare nulla, ma è vero che curl davvero non scade affatto?

 [email protected]:~# curl http://localhost/testdir/image.jpg

Lo chiedo perché sto reindirizzando qualsiasi richiesta di immagini in testdir a un modulo Apache separato che genera quelle immagini al volo. Possono essere necessari fino a 15 minuti prima che l'immagine sia effettivamente pronta e consegnata al cliente richiedente.

curl aspetta sempre (o dipende dalla configurazione) o c'è una sorta di timeout?

Risposta accettata:

Sì.

Parametri di timeout

curl ha due opzioni:--connect-timeout e --max-time .

Citando dalla manpage:

--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.

e:

-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.

Predefiniti

Qui (su Debian) smette di provare a connettersi dopo 2 minuti, indipendentemente dal tempo specificato con --connect-timeout e anche se il valore di timeout di connessione predefinito sembra essere 5 minuti secondo il DEFAULT_CONNECT_TIMEOUT macro in lib/connect.h.

Un valore predefinito per --max-time sembra non esistere, facendo curl attendi per sempre una risposta se la connessione iniziale riesce.

Cosa usare?

Probabilmente sei interessato a quest'ultima opzione, --max-time . Per il tuo caso impostalo su 900 (15 minuti).

Correlati:la differenza tra "du -sh *" e "du -sh ./*"?

Specificando l'opzione --connect-timeout a qualcosa come 60 (un minuto) potrebbe anche essere una buona idea. Altrimenti curl proverà a connettersi ancora e ancora, apparentemente usando un algoritmo di backoff.


Linux
  1. Come fa un programma a decidere se avere o meno stampe a colori?

  2. In `mentre Ifs=Leggi..`, perché Ifs non ha alcun effetto?

  3. Perché l'opzione Ssh -t aggiunge Cr e Lf nell'output reindirizzato?

  4. Linux:cosa fa l'opzione "nointremap" di Linux?

  5. Perché '/' ha una voce '..'?

Linux – Ionice non ha alcun effetto sulle scritture non sincronizzate (ovvero le scritture normali)?

Il kernel Linux ha la funzione principale?

Pipe deve scrivere un file temporaneo?

tee:Cosa fa esattamente l'opzione --ignore-interrupts?

Un processo può avere un proprietario? Cosa significa?

GPG non ha abbastanza entropia