Zakończenie zadania rsync po zamknięciu połączenia SSH


13

Przesyłam dużą liczbę plików z jednego komputera na inny za pomocą rsync. Robię to przez SSHing do komputera źródłowego i wykonuję takie polecenie:

sudo rsync ssh --rsync-path="sudo rsync" source_dir user@host.com:dest_dir.

Nawet jeśli dodam nohupprzed tym poleceniem, za każdym razem, gdy zamykam okno terminala, z którego I SSHed, połączenie zostaje zamknięte.

Jak mogę to zrobić, aby mój transfer plików był kontynuowany po zamknięciu połączenia SSH?

Odpowiedzi:


16

Powodem, dla którego ci nohupnie pomaga, jest to, że program działa ze standardowymi plikami IO.

Oto „fragment strony Wiki dla nohup:

Uwaga - Zadania w tle Nohupping są zwykle używane, aby uniknąć ich zakończenia podczas wylogowywania ze zdalnej sesji SSH. Innym problemem, który często pojawia się w tej sytuacji, jest to, że ssh odmawia wylogowania („zawiesza się”), ponieważ odmawia utraty danych z / do zadań w tle. Problem ten można również rozwiązać poprzez przekierowanie wszystkich trzech strumieni we / wy:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Należy również pamiętać, że zamykająca sesja SSH nie zawsze wysyła sygnał HUP do różnych procesów. Zależy to między innymi od tego, czy pseudo-terminal został przydzielony, czy nie.

Możesz screendo tego użyć .

Wystarczy utworzyć sesję ekranu za pomocą: screen -S rsync następnie odłączasz ekran za pomocą CTRL+A d

Możesz odłączyć się od SSH


4
Chcę dodać, że wykonując jakąkolwiek pracę, która zostanie przerwana, np. Przez utracone połączenie, będzie problematyczne, następnie uruchom ją w sesji ekranowej. Ekran został zaprojektowany w celu ochrony przed przypadkową utratą połączenia. Możesz zalogować się zdalnie, uruchomić ekran, rozpocząć pracę, a jeśli stracisz połączenie, możesz ponownie połączyć się z dowolną działającą instancją ekranu. Screen ma także inne przydatne funkcje - przechwytywanie sesji do pliku dziennika, posiadanie wielu „ekranów” w jednej sesji (oszczędność sieci) i wielu przeglądających (styl Classroom). Warto również wspomnieć, że tmux jest alternatywą dla ekranu.
Johan

6

To polecenie na ekranie jest w porządku, ale nie działało dokładnie dla moich potrzeb.

To działało o wiele lepiej:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &

pracował dla mnie, podobnie jak zaakceptowana odpowiedź, dzięki
Salaros
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.