我有一个脚本,用于在远程虚拟机上启动服务器。一切运行正常,直到我关闭执行该脚本的 shell。当 shell 关闭时,服务器也会关闭。经过一番查找,我发现了以下内容:
&
使用符号执行时将把作业发送到后台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
您可以做的另一件事是使用supervisord
或circus
运行您的程序并确保它在停止时自动重新启动。