最简单的使用tmux的方法,命令返回进程

最简单的使用tmux的方法,命令返回进程

我需要运行一个进程,但不能使用&... 但可以通过 运行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

这将附加到上面列出的第二个 tmux 实例。

如果您只运行一个 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'

之后您将返回 shell 提示符,就好像什么也没发生一样。但脚本将在内存中的 tmux 中运行。如果您退出 shell(或者您的 ssh 连接中断),它将继续运行。

要连接到 tmux 会话以查看终端中运行的程序,请运行以下命令:

tmux attach-session

要离开 tmux 会话并使其在后台运行,请ctrl-b依次点击d

exit要终止 tmux 会话,只需连接到它,如果程序仍在shell中以正常方式运行,则终止程序。或者从 tmux 会话外部:

tmux kill-session

相关内容