web-dev-qa-db-ja.com

SCPとNohupを使用してサーバー間で大きなフォルダーを転送する

あるサーバーから別のサーバーに〜50GBのフォルダーをコピーしたい。これは当然ながらかなり時間がかかるので、「バックグラウンドで」実行できるようにしたいと思います。標準のSCPコマンドを使用するには、コンソールを開いたままにしておく必要があります。私はNohupについて読んでいますが、これでうまくいくはずですが、機能させるのに苦労しています。この場合でも、コンソールを開いたままにしておく必要があります。コマンドを入力した後、Nohupプログラムは開いたままになります。 CTRL+C 終了するには、転送が停止します。 Nohupの機能を誤解していますか?または、他にどのようにこれを達成できますか?

1
clb

scpセッションからscreenを開始し、screenからデタッチをコピーしたら、いつでもそのスクリーンセッションに戻ってその方法を確認する方が簡単だと思います行きます。

screen
scp foo bar

Ctrla に続く d 画面からデタッチするには

次に、画面に再接続します。

screen -x
1
ssebbass

名前Nohupは、HUPシグナルを指します。これは、端末がサーバーに接続された(電話)回線がハングアップしたときにプロセスに従来送信されていました。 Nohupは、現在「ハングアップ」が「端末ウィンドウを閉じる」ことを意味する場合でも、その信号が送信されないようにします。

tl; drサーバーから定期的にログアウトする代わりに、ターミナルウィンドウを閉じる(または、あなたの側でssh接続を終了する)だけです。 Nohupは、何らかの方法で端末接続が切断された場合でも、プロセスを実行し続けます。

0
mikezter

まあ、いくつかの問題があります。

  1. バックグラウンドでコマンドを実行する場合は、&をコマンドに追加する必要があります。 Nohup scp file server:path/ &のようなもの。バックグラウンドで実行され、コンソールを閉じてもファイルは転送されます。

  2. sftpの代わりにscpを使用します。これにより、パフォーマンスが大幅に向上します(特に大きなファイルの場合)。 SCPは非常に遅いです。 sftpでもバッチモードをサポートしています:sftp -b <(echo "cd path"; echo "put file") server &

0
Jakuje