web-dev-qa-db-ja.com

シェルを閉じると、 `scp`転送は閉じますか?

(あるリモートサーバーから別のリモートサーバーへの)scp転送があります。

このコマンドを実行したコンピュータを閉じたいのですが、転送が終了しますか? Bitwiseプログラムを使用してシェルにsshアクセスできます。

29
Borut Flis

いくつかの解決策があります。

背景とプロセスの否認

  1. リモートサーバーへのsshターミナルを開きます。
  2. 通常どおりscp転送を開始します。
  3. Scpプロセスの背景(Ctrl+Z、次にコマンドbgです。)
  4. バックグラウンドプロセス(disown)を否認します。
  5. セッションを終了すると(exit)、プロセスは引き続きリモートマシンで実行されます。

このアプローチの1つの欠点は、stdoutおよびstderrのファイル記述子に、sshセッションのttyへの参照が含まれていることです。このため、終了しようとするとターミナルがハングする場合があります。これを回避するには、~.と入力して、sshクライアントを強制的に閉じます(エスケープシーケンスは新しい行に続く必要があります...~?も参照してください)。破棄するプロセスがstdoutまたはstderrへの書き込みを行っている場合、ttyバッファーがいっぱいになると、プロセスが途中で終了する可能性があります。

スクリーンセッションを作成してデタッチする

GNU Screen を使用すると、リモートターミナルセッションを作成できます。これは、セッションからログアウトした後でも、切り離してサーバー上で実行し続けることができます。その後、サーバーに再度ログインして、セッションに再接続できます。

  1. Ssh経由でリモートサーバーにログインします。
  2. スクリーンセッションscreen -D -R <session_name>を開始します。
  3. 通常どおりscp転送を開始します。
  4. Screenセッションを切り離す Ctrl+A その後 d
  5. Sshセッションを終了します(exit

セッションに再接続するには:

  1. Ssh経由でリモートサーバーにログインします。
  2. スクリーンセッションに再度接続します、screen -D -R <session_name>

ハングアップなしでコマンドを実行する

Nohup を使用して回答を参照してください。

タスクスケジューラを使用する

これが自動化したい定期的な種類のタスクである場合、これが最良のソリューションです。

転送をスケジュールするには、 crontabat 、または batch を使用します。

36

Nohup(1) を使用できます。つまり、次のようにします。

Nohup scp alice@source:/the/answer/of/all [email protected]:/var/tmp/42 &

これにより、Nohup.outの出力が作成されます。その後、安全にログアウトできます。

10
vonbrand

はい、終了します。接続なしで端末セッションを維持するためのソリューションは、screenプログラムです。

SCREEN(1)                                                            SCREEN(1)

NAME
       screen - screen manager with VT100/ANSI terminal emulation

SYNOPSIS
       screen [ -options ] [ cmd [ args ] ]
       screen -r [[pid.]tty[.Host]]
       screen -r sessionowner/[[pid.]tty[.Host]]

DESCRIPTION
       Screen is a full-screen window manager that multiplexes a physical ter‐
       minal between several processes (typically interactive  shells).   Each
       virtual terminal provides the functions of a DEC VT100 terminal and, in
       addition, several control functions from the ISO 6429  (ECMA  48,  ANSI
       X3.64)  and ISO 2022 standards (e.g. insert/delete line and support for
       multiple character sets).  There is a  scrollback  history  buffer  for
       each virtual terminal and a copy-and-paste mechanism that allows moving
       text regions between windows.
6
Serge

上記のように、たとえばscreenコマンドを使用できます。

  • 画面を作成

user@server:~$ screen -S bigscptransfer

  • 画面にいます

ser@server:~$ scp bigfile.dat server2:.

  • を使用して画面から切り離す CTRL+A 次にプッシュ D

[detached from 5899.bigscptransfer]

  • 必要なときにセッションを再開します。

user@server:~$ screen -r bigscptransfer

2
victorcete