在Google Cloud上关闭SSH时保持Java应用运行


12

现在,我正在通过SSH连接到Google Cloud Compute上的VM来运行Java应用程序。我发出了运行应用程序的命令,并加载了控制台。一旦我终止SSH连接,该应用程序就会关闭。我认为这是因为控制台已关闭。

我希望此应用程序(这是服务器)在终止SSH之后仍然存在,并且在任何时候,我都希望能够重新连接到控制台并在服务器上发出命令。


Answers:


15

您声明:

我希望此应用程序(这是服务器)在终止SSH之后仍然存在,并且在任何时候,我都希望能够重新连接到控制台并在服务器上发出命令。

目标略微含糊,但我会刺中它!

要将任何命令作为后台进程在Linux服务器上运行,您应该在命令前加上nohup并追加&到末尾。

因此,最后的命令将是:

nohup [your command] &

nohup意味着该命令应忽略“挂断”,并且&附加在其上的&符是一个shell命令,告诉系统将其作为后台进程运行。有关其用法的更多信息,请参见此处

当您运行这样的命令时,该过程将运行,您将被送回到命令提示符,您可以退出终端会话,甚至可以去执行与该终端会话无关的其他操作。


1
如果我想返回该过程并在Java控制台中输入命令,我该怎么做?
Noahb32

1
@ Noahb32好吧,这将作为后台进程启动它;我主要使用这种方法来启动一个过程,然后忘记它。如果您想启动一个新的Java控制台,您可以这样做,因为您已经回到了Shell中。但是也许您应该研究使用screen替代方法,因为它可以让您在启动后重新进入会话。坦白说,您的问题含糊不清,因此,如果您能澄清一下,可能会有所帮助。
JakeGould '16

1
谢谢!我想补充一点,您可以监视另一个终端的输出:只需tail -f nohup.out在相同的工作中运行即可。目录
naXa

3

至少有三种方法可以执行此操作:(nohup“不挂断”),screen/ tmuxdisown。对于断开连接后需要连接到服务器并与守护程序进行交互的问题,您的问题尚不清楚。

如果是这种情况,nohupdisown为你释放的过程中会不会好比赛(虽然它继续运行)。tmux(以及screen),即使您也可以保持学期运行。

有关更多信息,请参见相应页面:

man nohup
man tux

Bash消失(假设您正在运行Bash,尽管许多其他Shell都包含类似的东西)


似乎disown至少在我使用的实例上,Google Cloud上没有命令开始于2019或2018年底。该nohup命令运行良好,但确实创建了一个可能不需要的额外文件。
trysis

1

要将应用程序与其运行中的外壳分离,以使其在外壳退出后仍然存在,请使用以下nohup命令。

您只需在常规命令前加上前缀nohup,它就可以工作。


0

另外,如果nohub不起作用,则可以使用screen

 ssh into your remote box. 

键入屏幕,然后启动所需的过程。

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

您的过程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.