一尘不染

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

linux

我试过了 nohup "sbt run" &

返回: nohup: failed to run command ‘sbt run’: No such file or directory

并尝试:

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

我认为cd上一个目录:

# cd ..

[5]+  Stopped                 sbt run < /dev/null  (wd: /home/sum)
(wd now: /home)

因此,它作为守护程序启动,但是如果我执行任何操作(如更改dir),它将终止该进程?如何保持进程运行?


阅读 368

收藏
2020-06-07

共1个答案

一尘不染

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

sbt run </dev/null >output-file &

编辑

好的,这是一个难题。简短答案:运行sbt如下:

setsid nohup sbt run &

理由:

sbt停止的原因是SIGTTOU信号的到来。在某些情况下,它会交付给后台进程,其中包括 修改终端配置
。这是我们的情况,因为根据strace -f sbt run &sbt这样在引擎盖下做了很多黑魔法:

[pid 16600] execve("/usr/bin/sh", ["sh", "-c", "stty -g < /dev/tty"], [/* 75 vars */] <unfinished ...>

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

2020-06-07