退出SSH会话之后坚持一个sbt进程的最合适的方法是什么?

我如何保留一个进程,特别是通过sbt命令产生的一个进程,在退出我的ssh进程之后还活着? 下面的相关问题[1] , [2] , [3]和[4]已经提供了信息,但并没有导致我的具体情况下的确定的解决scheme。 一个简短的背景:我有三台服务器代表组成一个集群的节点,每个节点上都运行着相同的程序来分配计算密集的任务。 这个过程的目的是在机器启动时始终运行,即每个服务器都专门用于这个项目。 每个节点都有以下内容( 当我有机会重新login时,我将用正确的信息更新 ):

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

我通过ssh通过我大学的networking访问每个节点。 我已经尝试过tmux和分离会话,但只有我自己的笔记本电脑不重新启动,这只会持续这个过程。 我采取以下步骤在每个节点上开始程序:

  1. 通过ssh user@host -p portlogin到每个节点
  2. 导航到相应的目录,并用sbt *
  3. sbt控制台发出run命令

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

是不是disown适合采取最合适的方法? 给定一个或另一个答案,我需要什么特定的和语法上正确的命令(如果使用disown方法sbt控制台 ),以便sbt进程从我的用户帐户分离,并将继续运行后,我退出ssh会议?

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

 sbt -Djline.terminal=jline.UnsupportedTerminal about & 

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

将sbt作为守护进程运行并不是一件容易的事情。
大部分建议都是使用sbt-assembly 。

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

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

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

这更常见。 尝试键入sbt clean &sbt compile & 。 Proccess已创建,但不会完成。

通过使用tmxux解决您的问题:

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

SHELL_COMMAND = sbt -Dgeotrellis cluster_seed_ip=xxx.xxx.xxx.xxx

你也可以在byobu后面使用tmux

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

之后,如果你输入byobu那么你进入你的命令会话。