web-dev-qa-db-ja.com

SSH接続を閉じた後にrsyncジョブを完了する

rsyncを使用して、あるコンピュータから別のコンピュータに大量のファイルを転送しています。私はソースコンピューターにSSHで接続し、次のようなコマンドを実行してこれを行っています。

Sudo rsync ssh --rsync-path="Sudo rsync" source_dir [email protected]:dest_dir

このコマンドの前にNohupを追加しても、SSHで接続したターミナルウィンドウを閉じると、接続が閉じます。

SSH接続を閉じてもファイル転送が続行されるようにするにはどうすればよいですか?

13
jaynp

Nohupが役に立たない理由は、プログラムが標準のIOファイルで動作するためです。

これは、Nohupの Wikiページ からの抜粋です:

注-バックグラウンドジョブのnohuppingは、通常、リモートSSHセッションからログオフするときにジョブが終了しないようにするために使用されます。この状況でよく発生する別の問題は、sshがバックグラウンドジョブとの間のデータの損失を拒否するため、ログオフを拒否する(「ハング」)ことです。この問題は、3つすべてのI/Oストリームをリダイレクトすることでも解決できます。

Nohup ./myprogram > foo.out 2> foo.err < /dev/null &また、SSHセッションを閉じると、依存するプロセスにHUP信号が送信されない場合もあります。とりわけ、これは疑似端末が割り当てられたかどうかに依存します。

screenを使用できます。

次のコマンドでscreenセッションを作成するだけです:screen -S rsync次に、画面を切り離します CTRL+Ad

[〜#〜] ssh [〜#〜]から切断できます

16
bakytn

この画面コマンドは問題ありませんが、私のニーズには正確に対応していませんでした。

これははるかにうまくいきました:

Nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
6
Ligemer