CentOS 7: скручивание и wget не работают
Моя проблема в том, что curl и wget обычно не могут получить больше, чем просто первую часть любого данного файла, и часто вообще ничего. Оба ранее работали на одном и том же сервере, и в моей сети ничего не изменилось - и я не совсем уверен, что изменилось на моем сервере, чтобы теперь они не работали, хотя очень периодически это будет работать просто отлично.
У меня включены автоматические обновления, так что, возможно, что-то с этим связано (но, возможно, нет), но в любом случае я не знаю, как решить.
Итак, мой сервер работает под управлением CentOS Linux версии 7.3.1611 (обновление: теперь обновлено до 7.6.1810)
Моя версия curl очень свежая:
curl 7.64.0 (x86_64-redhat-linux-gnu) libcurl / 7.64.0 NSS / 3.36 zlib / 1.2.7 libpsl / 0.7.0 (+ libicu / 50.1.2) libssh2 / 1.8.0 nghttp2 / 1.31.1
Впервые проблема была очевидна для меня, когда я пытался делать обновления WordPress (и это было проблемой некоторое время), когда обновления не будут выполнены, например:
Ошибка загрузки. ошибка cURL 28: тайм-аут операции после 300000 миллисекунд с 1355444 из 5007255 полученных байтов
Иногда обновления будут работать, но я думаю, что это, как правило, с очень маленькими файлами.
Итак, что касается попыток решить проблему с WordPress, я попытался:
- увеличено время ожидания в файлах Wordpress: class-wp-http-curl.php и class-http.php
- увеличено max_execution_time в /etc/php.ini до 120
... но без изменений. Также попытался из командной строки, используя curl и wget, но та же проблема.
например, $ curl -O -v https://downloads.wordpress.org/plugin/nimble-builder.1.5.0.zip
....
curl: (56) Тайм-аут операции ввода-вывода
Также:
a) resolv.conf - ранее было добавлено: параметры single-request-reopen, которые разрешали конфликт с IPv4/IPv6 много месяцев назад
- также использовал несколько различных настроек DNS-сервера
б) попытался получить материал с сайтов http и https
в) попытался получить, используя IP-адреса вместо доменных имен
г) межсетевой экран - временно запретил iptables входящие соединения:
$ iptables -I INPUT 1 -j ПРИНЯТЬ
а затем восстанавливается после тестирования:
$ iptables -D INPUT 1
д) перезагрузился
f) все обновления ОС установлены
Не совсем уверен, что еще попробовать. Это очень расстраивает. Любая помощь приветствуется. Спасибо!
Обновление 1: я могу без проблем использовать yum, и впоследствии обновил систему, и теперь она работает под управлением CentOS Linux версии 7.6.1810, но у меня все еще есть проблемы с curl и wget.
Обновление-2: Пример выходных данных приведен ниже:
Near beginning, a lot like this:
open("/lib64/libk5crypto.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220H\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=210824, ...}) = 0
mmap(NULL, 2302664, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7ff0cbf8c000
mprotect(0x7ff0cbfbd000, 2093056, PROT_NONE) = 0
mmap(0x7ff0cc1bc000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x30000) = 0x7ff0cc1bc000
close(3) = 0
Part way through, stuff like this:
access("/home/xyz/.pki/nssdb/.57765795_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory)
access("/home/xyz/.pki/nssdb/.57765796_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory)
access("/home/xyz/.pki/nssdb/.57765797_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory)
access("/home/xyz/.pki/nssdb/.57765798_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory)
access("/home/xyz/.pki/nssdb/.57765799_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory)
access("/home/xyz/.pki/nssdb/.57765800_dOeSnotExist_.db", F_OK) = -1 ENOENT (No such file or directory)
...
and quite a few of these:
recvfrom(3, 0x184e0d5, 12115, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
poll([{fd=3, events=POLLIN}], 1, 1000) = 1 ([{fd=3, revents=POLLIN}])
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 1 ([{fd=3, revents=POLLIN|POLLRDNORM}])
recvfrom(3, "\322U\200l9\332+\31w\235*\322dt\233\273\37]\244~\264{\24g\2\301\320\276\271\207\337["..., 12115, 0, NULL, NULL) = 1448
recvfrom(3, 0x184e67d, 10667, 0, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
Close to end, a lot like this:
write(2, "k", 1) = 1
poll([{fd=3, events=POLLIN}], 1, 1000) = 0 (Timeout)
poll([{fd=3, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}], 1, 0) = 0 (Timeout)
write(2, "\r", 1)
Объем памяти:
total used free shared buff/cache available
Mem: 8175404 1734268 310528 20832 6130608 5936760
Swap: 8257532 85472 8172060
Обновление 3: я также отключил IPv6 в случае каких-либо конфликтов, но это тоже не имеет значения.
Обновление 4: с тех пор я обнаружил, что yum (который работает) использует Python, тогда как curl и wget (которые не работают) не используют Python. Использование небольшого скрипта Python для тестирования тех же URL-адресов, которые я пытался получить с помощью curl/wget, прекрасно работает, поэтому я предполагаю, что должна быть какая-то библиотека / код / что-то, что использует curl/wget, чего нет в Python, что не очень хорошо играет Тем не менее, я понятия не имею, как исследовать / тестировать / и т. Д., Чтобы я мог заставить работать curl/wget. Тем не менее, по крайней мере, я знаю, что это не миллион других вещей, которыми он мог бы быть, но был бы очень признателен, если бы кто-то мог помочь мне в решении. Спасибо!