tmuxを使用する最も簡単な方法、コマンドはプロセスを返します。

tmuxを使用する最も簡単な方法、コマンドはプロセスを返します。

プロセスを実行する必要がありますが、使用できません&。ただし、.dllを介して実行できますtmux。スピード:

  1. サーバーコンピュータにSSHを端末に接続します。
  2. tmux
  3. アプリを起動して...待ちます...申し訳ありません。タイムアウトしました...

どのように(最も簡単な方法)アプリケーションに戻り、残りのログを表示しますか?

答え1

リモートサーバーに再接続すると、tmuxセッションを一覧表示できます。

tmux ls
0: 4 windows (created Tue Oct 15 07:55:07 2019) [255x62]
1: 2 windows (created Tue Oct 15 07:55:07 2019) [255x62]

その後、ターゲットセッションに再接続できます。

tmux attach-session -t 1

これは、上記の2番目のtmuxインスタンスに接続されます。

1つのtmuxセッションのみを実行している場合は、ショートカットを使用できます。

tmux a

最初のセッションを再接続します。

答え2

中断しやすくなったり終了したい場合は、-sessionをssh使用できますnohup。これにより、セッションからプロセスを分離し、sshバックグラウンドで実行し、出力をファイルに保存できます。

nohup COMMAND &

デフォルトの出力は、$HOME/nohup.outまたはリダイレクトできます。

nohup COMMAND > mylogs.log &

nohupを実行すると、PID次のプロセスに関する情報が表示されます。

$ nohup bash -c "while ((1)) ; do echo 1 ; sleep 1 ; done" > echo.log &
[1] 21816

PIDを記録し、次の方法でプロセスの状態を確認してください。ps <PID>

$ps 21816
  PID TTY      STAT   TIME COMMAND
21846 pts/6    S      0:00 bash -c while ((1)) ; do echo 1 ; sleep 1 ; done

出力が提供されないということは、PIDプロセスがもはやアクティブではないことを意味します(キャンセル、中断、停止、完了など)。

答え3

デモ目的でこれをリモートホストで実行したいとします。

for i in $(seq 60) ; do
    echo "$i seconds of 60"
    sleep 1
done

....そしてSSH接続が中断されても引き続き実行されることを望みます。

これ最も簡単な方法tmuxでこれを行うために私が考えることができるものは次のとおりです。

tmux new-session -d
tmux new-window bash -c 'for i in $(seq 60) ; do echo "$i seconds of 60" ; sleep 1 ;done'

その後、何も起こらなかったかのようにシェルプロンプトに戻ります。しかし、スクリプトはメモリのtmuxで実行されます。シェルを終了すると(またはSSH接続が中断された場合)、引き続き実行されます。

tmuxセッションに接続して端末で実行されているプログラムを表示するには、次のコマンドを実行します。

tmux attach-session

tmuxセッションを終了してバックグラウンドで実行するには、ctrl-bアイコンをクリックしますd

exittmuxセッションを終了するには、そのセッションに接続し、プログラムがシェルで正常に実行されている場合は、プログラムを終了するだけです。またはtmuxセッションの外部から:

tmux kill-session

関連情報