web-dev-qa-db-ja.com

現在のコマンドを取り外し可能なセッションに転送する(tmux / screen)

現在バックアップを実行していますが、tmuxまたはscreenなどの取り外し可能なバックアップに転送する必要があります。コマンドが現在実行されているときにこれを行う方法はありますか?

を押すと、コマンドを背景に送信できます Ctrl+Zfgコマンドを発行して元に戻します。しかし、ターミナルを終了したときにそのセッションに戻ることができるかどうかはわかりません。

42
Jürgen Paul

ほとんどの場合、これは機能します:

前提条件:reptyrおよびtmux/screenがインストールされている。プラットフォームに応じて、apt-getまたはyumでそれらを見つけることができます。

  1. 使用する Ctrl+Z プロセスを一時停止します。

  2. bgを使用してバックグラウンドでプロセスを再開します

  3. jobs -lを使用して、バックグラウンドプロセスのプロセスIDを検索します

    次のようなものが表示されます。

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. disown yourprocessnameを使用して、現在の親(シェル)からジョブを否認します

  5. tmux(推奨)またはscreenを起動します。

  6. Reptyrを使用してプロセスをtmux/screenセッションに再アタッチします。

    reptyr 11475
    
  7. これで、マルチプレクサをデタッチできます(デフォルト Ctrl+B、 Dtmuxの場合、または Ctrl+A、 Dscreen)の場合、プロセスがtmux/screenで続行している間にSSHを切断します。

  8. 後で再度SSHで接続するときに、マルチプレクサに接続できます(例:tmux attach)。

50
Ville

reptyrは良いですが、許可エラーが発生しました

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

次に見つかりました
-L Like '-l', but also redirect the child's stdio to the slave.

それは魅力のように働きました

$ reptyr -L 30622
Opened a new pty: /dev/pts/4
2
kqw