保持 Subshel​​l 在后台运行

保持 Subshel​​l 在后台运行

我试图在命令末尾使用“&”在后台运行脚本,但显然它不起作用。

这是我面临的问题。要使用付费模拟软件,提供商指示我运行特定脚本以启用许可证访问。我要保持这个打开状态并从另一个终端启动软件(在没有 GUI 的批处理模式下,因为我使用的是超级计算集群)。

问题是,我只能将一个脚本发送到头节点(我通过 ssh 连接)中的调度程序,并且作业会转发到其中一个计算节点。因此,我没有启动新终端来运行软件,而是尝试使用“&”在后台运行提供的脚本。这没有成功。看来,一旦使用此方法启动,与许可证服务器的连接就会关闭。

./script1.sh &

使用

xterm -e sh script1.sh 

在另一个终端中打开它会出现以下错误-

xterm: Xt error: Can't open display: 

xterm: DISPLAY is not set

任何帮助将不胜感激。

答案1

听起来您提交的作业需要是执行这两项任务的作业。

#!/bin/sh
license </dev/null >license.out 2>&1 &
license_pid=$!
simulator
kill $license_pid
wait $license_pid

这会将许可过程中的标准输出和标准错误保存到一个文件中,以便您可以tail查看它想告诉您是否存在问题的信息。

答案2

能不能ssh先不到节点,然后启动副本screen?查看手册页。它允许您将两个或多个会话作为ssh登录 shell 的(有效)子进程。

所以,ssh像平常一样。开始screen。键入Ctrl-A后跟以c创建第二个屏幕。在该屏幕中启动许可证,然后使用Ctrl- A Ctrl-A返回到原始屏幕。在那里开始您的应用程序。如果需要,可以使用Ctrl- A Ctrl-A顺序来回切换。

要分离而不终止,请使用Ctrl- ACtrl- d;稍后重新连接(即使在终止ssh会话并重新登录后,也可以使用screen -x.

答案3

(这个问题是我在大约三年前发布的。我敢说我在 shell 脚本编写方面已经变得更好了 - 我最近遇到了一个类似的问题,并再次提醒我这个问题。)

因此,正如之前的评论所建议的,我所需要使用的是screen.但由于我在集群上运行代码时无法访问键盘快捷键,因此我无法按照答案的建议使用 Ctrl+A 返回主脚本的正文。

好吧,我所要做的就是screen在后台开始,如下所示:

以与主脚本分离的模式启动一个名为“sample-screen”的屏幕。

screen -S sample-screen -d -m

要求分离的屏幕运行命令,而无需重新连接它。

screen -S sample-screen -p 0 -X stuff "./script1.sh & ^M"

^M是返回字符。类似于在分离屏幕中按 Enter 键。

要在退出脚本时终止屏幕-

screen -XS sample-screen quit

相关内容