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


13

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

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

nohupこのコマンドの前に追加しても、SSHした端末ウィンドウを閉じるたびに接続が閉じます。

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

回答:


16

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

以下はnohupのWikiページからの抜粋です。

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

nohup ./myprogram > foo.out 2> foo.err < /dev/null &また、SSHセッションを閉じると、常に依存プロセスにHUPシグナルが送信されるわけではないことに注意してください。とりわけ、これは、擬似端末が割り当てられたかどうかに依存します。

screenそのために使用できます。

次のコマンドを使用してスクリーンセッションを作成します。screen -S rsync その後、CTRL+でスクリーンをデタッチします。A d

そして、あなたはSSHから切断することができます


4
たとえば、接続が失われたために中断された場合に問題が発生する作業を実行する場合は、スクリーンセッションで実行します。画面は、偶発的な接続損失から保護するように設計されています。リモートでログインし、画面を開始し、作業を開始できます。接続が失われた場合は、実行中の画面インスタンスに再接続できます。画面には他の便利な機能があります-セッションをログファイルにキャプチャし、単一のセッションで複数の「画面」を持ち(ネットワークオーバーヘッドを節約します)、複数のビューア(教室スタイル)。また、tmuxは画面の代替手段であることに言及する価値があります。
ヨハン

6

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

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

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

受け入れられた答えと同じように私のために働いた、ありがとう
-Salaros
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.