我试过了 nohup "sbt run" &
nohup "sbt run" &
返回: nohup: failed to run command ‘sbt run’: No such file or directory
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),它将终止该进程?如何保持进程运行?
看起来像sbt从您的终端请求的输入。如果它确实不需要输入(可能是在后台运行程序),则可以这样运行:
sbt
sbt run </dev/null >output-file &
编辑
好的,这是一个难题。简短答案:运行sbt如下:
setsid nohup sbt run &
理由:
sbt停止的原因是SIGTTOU信号的到来。在某些情况下,它会交付给后台进程,其中包括 修改终端配置 。这是我们的情况,因为根据strace -f sbt run &,sbt这样在引擎盖下做了很多黑魔法:
SIGTTOU
strace -f sbt run &
[pid 16600] execve("/usr/bin/sh", ["sh", "-c", "stty -g < /dev/tty"], [/* 75 vars */] <unfinished ...>
要解决此问题,您可以sbt在不同的会话中运行以将其与当前终端分离,这样它就不会打开/ dev / tty并弄乱我们的终端。