wget rozpoczyna pobieranie, a następnie zatrzymuje się „nie można zapisać”

13

Korzystam z wget, aby kopiować niektóre pliki między serwerami. Używam następującego polecenia:

wget -x -N -i http://domain.com/filelist.txt

-x = Ponieważ chcę zachować strukturę katalogów

-N = Znacznik czasu, aby uzyskać tylko nowe pliki

-i = Aby pobrać listę plików z pliku zewnętrznego, po jednym w każdym wierszu.

Małe pliki, takie jak jeden, testuję, a pobieranie 326 KB jest w porządku.

Ale inny, 5 GB, pobiera tylko 203 MB, a następnie zatrzymuje się (zawsze 203 MB daje lub bierze kilka kilobajtów)

Wyświetlany komunikat o błędzie to:

Nie można pisać do „path / to / file.zip”

(Nie jestem pewien, dlaczego przed i po są dziwne postacie. Używam Putty w Windowsie, a to może, ale nie musi mieć z tym nic wspólnego, więc zostawiłem je. Nie zakładam.)

Pełna odpowiedź jest następująca: (zastąpiłem ścieżki, adres IP i nazwę domeny)

--2012-08-31 12: 41: 19-- http://domain.com/filelist.txt Rozwiązywanie domeny.com ... MY_IP Łączenie z domeną.com | MY_IP |: 80 ... podłączony. Wysłano żądanie HTTP, oczekując na odpowiedź ... 200 OK Długość: 161 [tekst / zwykły] Plik serwera nie nowszy niż plik lokalny âdomain.com / filelist.txtâ

--2012-08-31 12: 41: 19-- http://domain.com/path/to/file.zip Łączenie z domeną.com | MY_IP |: 80 ... podłączony. Wysłano żądanie HTTP, oczekując na odpowiedź ... 200 OK Długość: 5502192869 (5.1G) [application / zip] Rozmiary nie pasują (lokalnie 213004288) - pobieranie.

--2012-08-31 12: 41: 19-- http://domain.com/path/to/file.zip Łączenie z domeną.com | MY_IP |: 80 ... podłączony. Wysłano żądanie HTTP, oczekując na odpowiedź ... 200 OK Długość: 5502192869 (5.1G) [application / zip] Zapisywanie do: âdomain.com / path / to / file.zipâ

3% [====>
] 213,003,412 8,74 M / s w ciągu 24s

Nie można pisać na âdomain.com / path / to / file.zipâ

Wydaje się, że nie ma znaczenia, czy katalog ścieżek już istnieje lub jest tworzony w locie.

Czy ktoś ma pojęcie, dlaczego to się zatrzymuje i jak mogę to naprawić?

Jakakolwiek pomoc jest jak najbardziej doceniana.

EDYCJA: Próbowałem także zrobić wget, nie wprowadzać pliku i zmieniać jego nazwy. Tym razem pobiera trochę ponad 3 GB, a następnie daje to samo, nie może zapisać błędu.

wget -x -N http://domain.com/path/to/file.zip -O files/bigfile.zip
John Mellor
źródło
Czy masz na swojej drodze jakieś znaki specjalne?
JMeterX
Czy to działa zgodnie z oczekiwaniami, jeśli wpiszesz „cd / tmp &&” przed poleceniem?
Czy twój dysk jest pełny?
Jenny D.
Dysk zdecydowanie nie jest pełny i nie ma znaków specjalnych. Chociaż długość ścieżki wynosi 87 znaków, niektóre Googling wykazały pewne problemy z długimi nazwami (nazwa pliku to tylko 29 znaków). W tmp kończy się to w ten sam sposób.
John Mellor,
@FreezeDriedPop Ponieważ nazwa pliku jest stosunkowo długa, możesz zmienić tę -Oopcję za pomocą opcjiwget -O test.zip http://link
JMeterX

Odpowiedzi:

7

Ten błąd pojawi się, jeśli zabraknie miejsca na dysku. uruchom df, a zobaczysz, czy katalog, w którym piszesz, ma 100%

Słońce
źródło
4

Jest to problem z długim adresem URL. Ja też stawiłem temu czoła. Więc użyłem bit.ly i skróciłem adres URL. Działa jak marzenie!

Namchester
źródło
Jesteś pewny? Wydaje się mało prawdopodobne, że pobieranie rozpocznie się i zerwie w pewnym momencie, gdy problem dotyczy adresu URL, który jest używany tylko na samym początku transakcji.
Felix Frank
Tak. Miałem ten sam problem. Spróbuj.
Namchester
Myślę, że problem polega na tym, że linux nie jest w stanie rozpoznać długiego adresu URL.
Namchester
Podejrzewam, że masz na myśli muszlę? Ponieważ jądro jest zdecydowanie niewinne tej awarii. Nawet w przypadku powłoki jest to mało prawdopodobne, ale gdyby tak było, pobieranie nie mogłoby się nawet rozpocząć - powłoka wyskoczyłaby przed uruchomieniem potencjalnego wgetprocesu.
Felix Frank
1
Dla mnie był to ciąg zapytania w wget http://dltr.org/skin/frontend/lowes/default/css/custom.css?001
adresie
1

Właśnie dodałem a -do tarpolecenia po potoku po wget

miałem

wget https://example.com/path/to/file.tar.gz -O -|tar -xzf -C /path/to/file

następnie zmieniłem na

wget https://example.com/path/to/file.tar.gz -O - | tar -xzvf - -C /path/to/file
Shadi
źródło
Nie zapomnij także o `-` dla smoły :).
Shital Shah,
0

Jeśli zacznie zapisywać duży plik i zapisze 203 MB, podejrzewam, że masz albo pełny system plików po stronie odbierającej, albo upływa limit czasu połączenia sieciowego.

Możesz użyć df -h na serwerze odbierającym, aby sprawdzić, czy system plików jest pełny

Sprawdź tę odpowiedź na problemy z przekroczeniem limitu czasu wget:

/programming/2291524/does-wget-timeout

Spróbuj ponownie wykonać transfer, który się nie powiódł, i pomiń opcję -N znacznik czasu

Uruchom także ulimit -a, aby sprawdzić, czy istnieje limit rozmiaru pliku na serwerze odbierającym

DisgruntledUser
źródło
Nie jestem ekspertem, ale myślę, że działa w CentOS 6. Nie jestem też pewien, jak sprawdzić reprezentację postaci. Chociaż zaczyna się pobieranie i pobieranie innych mniejszych plików w porządku, więc nie sądzę, że to brzmi jak problem.
John Mellor,
Czy pliki, które udało się pobrać, mają JAKIEKOLWIEK zabawne postacie w swoich nazwach?
Niezadowolony Użytkownik
Nie, żadnych dziwnych znaków, chyba że kropka jest dziwną postacią, np. „Megapack_4.11.zip”. Ale znowu spróbowałem tego tylko z nazwą „bigfile.zip” i pojawia się ten sam problem.
John Mellor,
Być może tylko Putty ma inną reprezentację char niż UTF-8
DisgruntledUser
Tak, naprawdę nie sądzę, że to jest problem, właśnie o tym wspomniałem, ponieważ kopiowałem i wklejałem z Putty. Prawdziwy problem, na który nie można pisać.
John Mellor,
0

Robiłem coś podobnego do:

wget -x -N -i http://domain.com/filelist.txt

Otrzymywałem:

--2016-12-09 07:44:23--  https://www.example.com/dir/details?abc=123&def=456
Resolving www.example.com (www.example.com)... 1.2.3.4
Connecting to www.example.com (www.example.com)|1.2.3.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
details?abc=123&def=456: No such file or directory

Cannot write to ‘details?abc=123&def=456’ (Success).

W moim równoważnym pliku filelist.txt miałem URL taki jak:

https://www.example.com/dir/details?abc=123&def=456

Aby debugować, próbowałem utworzyć ten sam plik, który wget próbował utworzyć:

touch "details?abc=123&def=456"
touch: cannot touch ‘details?abc=123&def=456’: No such file or directory

Altówka! Wygląda na to, że na tym ?polegał problem, ale dobrą praktyką byłoby usunięcie wszystkich znaków specjalnych z nazw plików, wyobraź sobie, co &zrobi, jeśli nie ucieknie.

nikc
źródło
0

Otrzymałem ten sam błąd w związku z tym poleceniem:

sudo wget -O - https://nightly.odoo.com/odoo.key | apt-key add -

problem polegał na sudo dla drugiego polecenia i rozwiązuję go za pomocą:

sudo su
Behnam Heydari
źródło