退出SSH会话后持久保存sbt进程的最合适方法?

时间:2013-11-06 03:48:29

标签: session ubuntu process ssh sbt

如何在退出sbt会话后保留一个进程,特别是通过ssh命令生成的进程?以下相关问题[1][2][3][4]提供了丰富的信息,但在我的特定情况下尚未找到明确的解决方案。简要背景:我有三个服务器代表组成节点的节点,每个节点都有相同的程序在其上运行,以分配计算密集型任务。此过程旨在始终在计算机启动时运行,即每个服务器专用于此项目。每个节点都有以下内容(当我有机会重新登录时,我会用正确的信息更新它):

Ubuntu 12.04.2 LTS
JVM X.X.X (is JDK 1.7 update 24+)
Scala X.X.X
sbt X.X.X

我通过ssh通过我大学的网络访问每个节点。我已经尝试了tmux并分离了一个会话,但只要我自己的笔记本电脑没有重启,这只会持续进行。我采取以下步骤在每个节点上开始程序:

  1. 通过ssh user@host -p port
  2. 登录每个节点
  3. 导航到相应的目录并使用sbt *
  4. 启动我的程序
  5. run控制台
  6. 中发出sbt命令

    *实际命令为sbt -Dgeotrellis cluster_seed_ip=xxx.xxx.xxx.xxx

    disownnohup是最合适的方法吗?给出一个或另一个的答案,我需要发出什么具体和语法正确的命令(如果使用sbt方法,来自disown控制台的)以便{ {1}}进程与我的用户帐户取消关联,并在退出sbt会话后继续投放?

3 个答案:

答案 0 :(得分:4)

看起来SBT挂在后台是一个JLine问题。有一种解决方法:

sbt -Djline.terminal=jline.UnsupportedTerminal about &

只需将此标志添加到要在后台运行的任何SBT命令。

答案 1 :(得分:2)

将sbt run作为守护进程并不是一件容易的事 大多数建议都使用sbt-assembly

如果您不想使用sbt-assembly,您可以首先打包scala应用程序,然后使用scala命令运行它。

对我来说,命令是这样的,scala将在你退出ssh后继续运行:

sbt clean package
nohup scala ./target/scala-2.10/trafficgenerator_2.10-1.0.jar &

答案 2 :(得分:2)

更为常见。尝试输入sbt clean &sbt compile &。创建过程但它不会完成。

使用tmxux解决您的问题:

tmux new -d -s $$ && tmux send -t $$ 'SHELL_COMMAND' ENTER

在您的上下文中SHELL_COMMAND = sbt -Dgeotrellis cluster_seed_ip=xxx.xxx.xxx.xxx

您也可以在tmux后面使用byobu

byobu new -d -s $$ && tmux send -t $$ 'SHELL_COMMAND' ENTER

之后如果输入byobu,则输入命令的会话。