我可以將輸出重定向到日誌檔案並同時將進程置於背景嗎?

我可以將輸出重定向到日誌檔案並同時將進程置於背景嗎?

我可以同時將輸出重定向到日誌檔案和後台進程嗎?

換句話說,我可以做這樣的事情嗎?

nohup java -jar myProgram.jar 2>&1 > output.log &

或者說,這不是一個合法的命令嗎?或者,我是否需要手動將其移至後台,如下所示:

java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1

答案1

第一個命令的一個問題是,您將stderr 重定向到stdout 所在的位置(如果您按照註釋中的建議將$ 更改為& ),然後將stdout 重定向到某個日誌文件,但這並沒有拉動重定向的stderr 。您必須按照其他順序執行此操作,首先將 stdout 傳送到您想要的位置,然後將 stderr 傳送到 stdout 所在的位址

some_cmd > some_file 2>&1 &

然後你可以添加 & 將其發送到後台。可以使用jobs指令存取作業。jobs將向您顯示正在執行的作業,並對其進行編號。然後,您可以使用 % 後跟類似的數字來談論工作kill %1

另外,如果末尾沒有 & ,您可以使用 暫停命令Ctrlz,使用該bg命令將其置於後台並將fg其帶回前台。與jobs命令結合起來,這個功能就很強大了。

澄清上面關於編寫命令的順序的部分。假設stderr是位址1002,stdout是位址1001,檔案是1008 2>&1> file哪一個將stdout移到1008,但將 stderr 保持在 1001。 它不會拉出所有指向 1001 的內容並將其移動到 1008,而只是引用 stdout 並將其移動到文件。
相反,它將 stdout 移動到 1008,然後將 stderr 移動到 stdout 指向的點,即 1008。這樣兩者都可以指向單一檔案。

答案2

java -jar myProgram.jar &> output.log &

請注意,將&>stdout 和 stderr 定向到 output.log

答案3

停止<Ctrl+Z>並在背景繼續執行bg相當於&在命令末尾執行。

因此,對於在背景運行並重定向輸出:

java -jar myProgram.jar 2> errorOutput.log > output.log &

如果您還需要該命令在您離開終端時不會消失,那麼您應該使用nohup

答案4

您可以使用 screen 來代替 nohup。您可以即時查看程式的狀態。您甚至可以將所有輸出記錄到文件中。當您透過 ssh 存取伺服器並因連接不良或不活動而登出時,它非常有用。登入後,您可以從上次離開的地方繼續工作。參考詳細了解。

相關內容