Выполнение задания rsync после закрытия соединения SSH

13

Я передаю большое количество файлов с одного компьютера на другой с помощью rsync. Я делаю это, используя SSHing на исходный компьютер и выполняя такую ​​команду:

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

Даже если я добавлю nohupперед этой командой, всякий раз, когда я закрываю окно терминала, из которого я SSHed, соединение закрывается.

Как это сделать, чтобы при закрытии соединения SSH передача файлов продолжалась?

jaynp
источник

Ответы:

16

Причина, по которой вам nohupне помогают, заключается в том, что программа работает со стандартными файлами ввода-вывода.

Вот отрывок из вики-страницы для nohup:

Примечание. Как правило, фоновые задания не используются для предотвращения их завершения при выходе из удаленного сеанса SSH. Другая проблема, которая часто возникает в этой ситуации, заключается в том, что ssh отказывается выходить из системы («зависает»), поскольку отказывается потерять любые данные из / в фоновые задания. Эта проблема также может быть преодолена путем перенаправления всех трех потоков ввода-вывода:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Также обратите внимание, что закрывающий сеанс SSH не всегда отправляет сигнал HUP зависимым процессам. Среди прочего, это зависит от того, был ли выделен псевдотерминал или нет.

Вы можете использовать screenдля этого.

Просто создайте сеанс экрана с помощью: screen -S rsync затем вы отсоедините экран с помощью CTRL+A d

И вы можете отключиться от SSH

bakytn
источник
4
Я хочу добавить, что при выполнении любой работы, которая, если прервется, например, из-за потерянного соединения, будет проблематично, запустите ее в сеансе экрана. Экран предназначен для защиты от случайной потери соединения. Вы можете войти в систему удаленно, запустить экран, начать работу, и если вы потеряете соединение, вы можете повторно подключиться к любому экземпляру работающего экрана. Экран имеет другие полезные функции - захват сеанса в файл журнала, наличие нескольких «экранов» в одном сеансе (экономия сетевых ресурсов) и несколько зрителей (стиль класса). Также стоит отметить, что tmux является альтернативой экрана.
Йохан
6

Эта экранная команда в порядке, но она точно не работает для моих нужд.

Это сработало намного лучше:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
Ligemer
источник
работал для меня, так же, как принятый ответ, спасибо
Salaros