2016-11-16 103 views
4

我試過nohup "sbt run" &如何將sbt作爲守護進程運行?

回報: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) 

所以它開始作爲後臺進程,但如果我執行任何操作,例如更改目錄,它殺死的過程嗎?如何保持過程運行?

回答

6

看起來像sbt從您的終端請求輸入。如果不真正需要輸入(這大概就是這樣,當你在後臺運行的程序),你可以像這樣運行:

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

詳見this answer

編輯

好的,現在這是一個謎題。簡短的回答:運行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並且弄亂我們的終端。

+0

請參閱更新 –

+0

@藍天更新。 –

相關問題