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