我如何保留一个进程,特别是通过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
和分离会话,但只有我自己的笔记本电脑不重新启动,这只会持续这个过程。 我采取以下步骤在每个节点上开始程序:
ssh user@host -p port
login到每个节点 sbt
* 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
那么你进入你的命令会话。