如何在 Linux 中断开正在运行的 bash 作业与 shell 的连接?

如何在 Linux 中断开正在运行的 bash 作业与 shell 的连接?

我有一个脚本,用于在远程虚拟机上启动服务器。一切运行正常,直到我关闭执行该脚本的 shell。当 shell 关闭时,服务器也会关闭。经过一番查找,我发现了以下内容:

  1. &使用符号执行时将把作业发送到后台
  2. disown -h将断开该作业与 shell 的连接并允许其运行,而不管 shell 是什么。

我使用的命令是:

./startServer.sh nasb_wxscat160_catalog-4.1.6 1.0.8 > catalog-log.txt & disown -h

当我关闭 shell 并检查ps -ef | grep java该作业是否仍在工作时,我确实在列表中看到了它。但是当我尝试连接到服务器时,它没有响应。

经过更深入的检查,我发现日志文件已经被填满了,直到我关闭 shell 并使用标志时,ps -m我才知道进程作业没有正常工作。

有人遇到过类似的事情吗?

答案1

对于不自我守护的一次性作业,我通常在屏幕会话中运行它们。缺点是您必须在开始作业之前启动屏幕。我的流程通常是这样的:

% screen -D -R   # start a new screen session, with reattachment options
% command_to_run_job
ctrl-A ctrl-D

这将在前台运行该作业,然后与屏幕会话分离。然后您可以注销,稍后再使用另一个“screen -D -R”重新连接到它

答案2

您可以做的另一件事是使用supervisordcircus运行您的程序并确保它在停止时自动重新启动。

http://circus.readthedocs.org

相关内容