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

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%


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!


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

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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.