web-dev-qa-db-ja.com

tmuxの再起動後のリモートコード実行

tmux-resurrectについて読みましたが、次のことができるかどうかはまだわかりません。

  1. tmuxセッションを開始します
  2. sshからリモートサーバーへ
  3. リモートホストで長時間実行コードを起動する
  4. tmuxサーバーを強制終了します(ローカルマシンの再起動など)
  5. tmuxセッションを復元して再接続します(例:tmux-resurrectを使用)
  6. リモートサーバーで起動したコードの監視を続行します

手順3でNohupを使用する必要がありますか?または、tmux-resurrect(または他のツール)で処理できますか?

4
MichaelSB

サーバーが「見る」もののために、ローカル側のツールはこれを行うことができません。

  • sSHを正常に切断すると、サーバーはすぐにこれに気付きます。
  • 消えたばかりの場合(ハードリセットなど)、何らかのタイムアウトが発生するまで接続はサーバー側で開いたままになります(ClientAlive*オプション、TCPキープアライブの概念を比較–参照-) この回答 詳細については)。

tmux-resurrectまたはローカル側の別のツールを使用するつもりであったとしても、サーバーは認識せず、気にしません。 Nohup以上を使用しない限り、実行時間の長いコードは終了します…

可能であれば、サーバーでtmux(またはscreen)を使用します

  1. クライアントでtmuxセッションを入力しないでください。
  2. sshをサーバーに送信します。
  3. サーバーでtmuxセッションを開始します。
  4. そこで長時間実行されるコードを起動します。
  5. とにかく切断します。リモートtmuxから切り離すかどうかにかかわらず、正常に切断するかどうか。
  6. sshもう一度。
  7. tmuxセッションはまだそこにあります(その間にサーバーに何か悪いことが起こった場合を除く)。 tmux aで再接続します。

私は毎日このようにtmuxを使用していますが、これは正しい方法だと思います。私のラップトップでは、tmuxセッションはせいぜい数時間続き、毎晩シャットダウンします。しかし、私はtmuxセッションが数か月間実行されるいくつかのサーバーにアクセスできます。私がこれを書いているとき、そのうちの1つで、2か月前のように開始されたtmuxセッションで文字通り1週間実行されているwatch df -hプロセスがあります。

5