Curl 7.68.0(x86_64-pc-linux-gnu)libcurl/7.68.0を実行していますが、-max-timeを設定しようとしていますまたは-connect-timeout、残念ながらこれらの値は何もしないようです。
PoC 1:
time curl -v -k -I --max-time 5 https://myawesomehost/file.test
* Resolving timed out after 5001 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5001 milliseconds
real 0m10.031s
user 0m0.011s
sys 0m0.012s
これは5秒後にコマンドを強制終了するはずですが、10.031秒かかりました
PoC 2:
time curl -v -k -I --connect-timeout 3.0 https://myawesomehost/file.test
* Resolving timed out after 3000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 3000 milliseconds
real 0m10.068s
user 0m0.005s
sys 0m0.010s
繰り返しますが、10.068秒かかりました。
timeoutコマンドラインツールを使用できることがわかりましたが、curlの問題を知りたいのですが。
あなたのcurl --version
を見ずに、この正確な問題にぶつかったことに基づいて、暗闇の中で試してみましょう。あなたのバージョンのcurlはc-areなしでビルドされていますか? curl --version
の最初の行で、次のことがわかります。
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV c-ares/1.10.0
最近、DNSタイムアウトが原因でcurlが指定されたタイムアウトを超えるという同じ問題に遭遇しました。冗長をオンにすると、DNSルックアップが表示されますDIDタイムアウトは5秒ですが、20秒になるまで待機して完全にタイムアウトして閉じます。rootが原因で c- ares (非同期DNSリゾルバーライブラリ)。
私はそれらから取得したソースからそれをビルドしました github これらを使用して instructions を追加しますが、./configure --enable-ares
を追加します
ここでは、バージョン情報でc-ares c-ares/1.10.0
を使用してビルドされていることがわかります。
$ /usr/local/bin/curl --version
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV c-ares/1.10.0
Release-Date: [unreleased]
Protocols: dict file ftp Gopher http imap pop3 rtsp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile UnixSockets
期待どおりに動作します
$ time /usr/local/bin/curl --max-time 5 google.com -v
* Resolving timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5000 milliseconds
real 0m5.002s
user 0m0.000s
sys 0m0.002s
そしてc-aresなしで構築されました
/usr/local/bin/curl --version
curl 7.71.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.71.0-DEV
Release-Date: [unreleased]
Protocols: dict file ftp Gopher http imap pop3 rtsp smtp telnet tftp
Features: AsynchDNS IPv6 Largefile UnixSockets
タイムアウトが機能しない:
time /usr/local/bin/curl --max-time 5 google.com -v
* Resolving timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Resolving timed out after 5000 milliseconds
real 0m20.023s
user 0m0.003s
sys 0m0.000s
ソースからcurlを構築している場合、またはそれがオプションの場合は、おそらくそのオプションを有効にする必要があります。
編集:JamesTheAwesomeDudeは、このcURLがどこから来たかを追跡することは理解する価値があるという優れたポイントを作りました。私の場合、それはAmazon Linux 2を実行する新しいEC2インスタンスでした。
$ cat /etc/*-release | grep PRETTY_NAME
PRETTY_NAME="Amazon Linux 2"