Linux 如何将sbt作为守护进程运行?

Linux 如何将sbt作为守护进程运行?,linux,ubuntu,sbt,Linux,Ubuntu,Sbt,我试过nohup“sbt跑”& 返回:nohup:无法运行命令“sbt run”:没有这样的文件或目录 并尝试: nohup sbt run & [2] 7897 # nohup: ignoring input and appending output to ‘nohup.out’ 当我希望进程继续运行时,我收到: [2]+ Stopped nohup sbt run 如何将sbt作为守护进程运行 更新: sbt run </dev/null

我试过
nohup“sbt跑”&

返回:
nohup:无法运行命令“sbt run”:没有这样的文件或目录

并尝试:

nohup sbt run &
[2] 7897
# nohup: ignoring input and appending output to ‘nohup.out’
当我希望进程继续运行时,我收到:

[2]+  Stopped                 nohup sbt run
如何将sbt作为守护进程运行

更新:

sbt run </dev/null &
[5] 8961

sbt运行看起来像是
sbt
从终端请求的输入。如果它确实不需要输入(这可能是在后台运行程序时的情况),您可以按如下方式运行它:

sbt run </dev/null >output-file &
[pid 16600] execve("/usr/bin/sh", ["sh", "-c", "stty -g < /dev/tty"], [/* 75 vars */] <unfinished ...>
理由:

sbt
停止的原因是
sigttoo
信号的到达。在几种情况下,它会被传送到后台进程,包括修改终端配置。这是我们的情况,因为根据
strace-f sbt run&
sbt
在引擎盖下面做了很多黑魔法,如下所示:

sbt run </dev/null >output-file &
[pid 16600] execve("/usr/bin/sh", ["sh", "-c", "stty -g < /dev/tty"], [/* 75 vars */] <unfinished ...>
[pid 16600]execve(“/usr/bin/sh”、[“sh”、“-c”、“stty-g

为了解决这个问题,您可以在不同的会话中运行
sbt
,将其与当前终端分离,这样它就不会打开/dev/tty并弄乱我们的终端。

oleg andriyanov的答案在我的情况下不起作用。 (进程在启动后不久退出)

在这种情况下,请尝试在下面的游戏ML中编写的Mirko Stocker命令,以获得替代方案。

这也应该起作用

sbt -Djline.terminal=jline.UnsupportedTerminal run &

来源:

您可以轻松地使用tmux来完成此操作(并持久化任何其他内容)。一个额外的功能是,如果您在远程服务器上安装,您可以将作业持久化为“会话”,然后重新连接到同一终端“会话”

1) 启动你的sbt工作

sbt
run
2) 与tmux会话分离

ctrl+b (then release)
d
3) 显示活动的tmux会话(仅发生在本地tmux)

4) 显示远程计算机上的所有会话

$ tmux a
5) 附加会话

$ tmux attach-session (your-session-number)

如果您已经运行了sbt,并且希望将其移动到后台,那么一旦进程处于停止状态,就用

kill -s SIGCONT PID 


这将确保sbt进程现在在后台运行。

@blue sky已更新。
$ tmux attach-session (your-session-number)
kill -s SIGCONT PID 
kill -s SIGCONT JOB_NUMBER