现在,我正在通过 SSH 连接到 Google Cloud Compute 上的虚拟机来运行 Java 应用程序。我发出命令来运行该应用程序,它会加载一个控制台。一旦我终止 SSH 连接,该应用程序就会关闭。我认为这是因为控制台已关闭。
我希望这个应用程序(它是一个服务器)在我终止 SSH 之后能够继续存在,并且在任何时候,我希望能够重新连接到控制台并在服务器上发出命令。
答案1
您这样陈述:
我希望这个应用程序(它是一个服务器)在我终止 SSH 之后能够继续存在,并且在任何时候,我希望能够重新连接到控制台并在服务器上发出命令。
目标有点模糊,但我会努力尝试!
要在 Linux 服务器上以后台进程的形式运行任何命令,你应该在命令前面加上nohup
并附加到&
末尾。
因此最终的命令是:
nohup [your command] &
意思nohup
是命令应该忽略“挂断”,后面&
的 & 符号是 shell 命令,告诉系统将该命令作为后台进程运行。有关其用法的更多信息可以在这里找到。
当您运行这样的命令时,进程将运行,您将被送回命令提示符,您可以退出终端会话,甚至可以在该终端会话期间执行与该命令无关的其他操作。
答案2
至少有三种方法可以做到这一点:(nohup
'不挂断'),screen
/tmux
或disown
。您的问题有点不清楚您是否需要连接到服务器并在断开连接后与守护进程交互。
如果是这种情况,当您发布该过程时,nohup
和disown
将不会很好地匹配(尽管它仍在运行)。tmux
(并且screen
)即使您也是如此,也会保持术语的运行。
欲了解更多信息,您可以查看相应页面:
man nohup
man tux
Bash 放弃(假设您正在运行 Bash,尽管许多其他 shell 也包含类似的东西)
答案3
要将应用程序与其正在运行的 shell 分离,并使其在 shell 退出后仍然存在,请使用该nohup
命令。
您只需在常规命令前加上前缀nohup
,它就可以工作。
答案4
另外,如果 nohub 不工作,你可以使用屏幕:
ssh into your remote box.
输入 screen 然后启动您想要的进程。
Press Ctrl-A then Ctrl-D.
这将断开您的屏幕会话,但保持您的进程运行。您现在可以退出远程框。
If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output
的
你的流程。