我有一个Docker映像,需要在没有管理员权限的环境中运行,使用RHEL中的Slurm 17.11.8。我正在使用udocker运行容器。
在此容器中,需要运行两个应用程序:
[1] ROS模拟(有一个rosnode是与[2]对话的TCP客户端)
[2]可执行文件(TCP服务器)
因此[1]和[2]需要一起运行,并且它们也共享一些公用文件。通常,我在单独的终端中运行它们。但是我不知道如何使用SLURM做到这一点。
可能的解决方案:
(A)使用两个具有相同图像的容器,但是它们的文件将存储在本地。可以改用卷。但这要求我进行大量更改,并可能在不将其作为容器运行时(例如在Eclipse中)破坏兼容性。
(B)使用bash脚本启动两个终端并运行[1]和[2]。然后运行此脚本。
我正在看(B),但不知道如何处理。我研究了其他方法,但是它们解决了多个流程的顺序执行。我需要这些是并发的。
如果有帮助,我可以使用xfce-terminal,尽管我可以切换到其他终端,例如Gnome,Konsole。
答案 0 :(得分:0)
由于我不使用udocker,因此这是黑暗中的镜头。
在要通过sbatch提交的slurm提交脚本中,您可以为两个作业分配足够的资源以在同一节点上运行(因此,您只需为客户端/服务器引用localhost)即可。像这样在后台开始您的第一个过程:
udocker container_name container_args &
&应该在后台启动第一个容器。
然后您将启动第二个容器:
udocker 2nd_container_name more_args
这将在不带&的情况下运行,以使该过程保持在前台。理想情况下,当第二个容器完成时,脚本将完成,并且清理代码将杀死第一个容器。如果两个容器都会干净利落地结束,则可以在脚本结尾处等待。
注意事项: