題 nohup輸出重定向到不同的文件


我用 nohup 通常用於重要的長期運行流程 linux/bash, 以至於 nohup time my command with arguments && mv nohup.out my.log 對我來說幾乎是一個成語。

問題是 nohup 放兩個 stdout 和 stderr 成 nohup.out,我無法控製文件的名稱。這意味著,如果我不小心開始兩個 nohup在同一目錄中,它們的輸出將被交錯 nohup.out

問題是:

  1. 我該如何處理這個問題?一直在跑 nohups在單獨的目錄中並編寫一個首先檢查的shell函數 ./nohup.out 我看到的是兩個糟糕的選擇。

  2. 為什麼我不能告訴nohup.out重定向輸出的位置? GNU工具往往有 這麼多選擇, 為什麼不 nohup


4
2018-02-14 15:38


起源




答案:


您可以 重定向stdout和stderr 到一個文件。使用Bash 4(或其他如Zsh),就像:

nohup <some-command> &> output.log

我不能告訴你為什麼沒有單獨的選擇 nohup 設置輸出,但如果你的shell可以處理它,你真的不需要一個選項。


6
2018-02-14 15:44



它會阻止嗎? nohup 從執行自己的重定向? - grawity
GNU nohup 如果你指定的話,它會將stdout重定向到一個文件 nohup command > file。 BSD nohup 根本沒有提到這一點,但它對我有用。 - slhck
GNU nohup說,如果你指定,它會將stdout重定向到一個文件 nohup command > file 不是重定向的情況下 nohup command > file 由shell處理而不是 nohup?如果是這樣,怎麼可能 nohup 根據天氣重定向採取任何行動是否存在? - Piotr Dobrogost
文件 nohup.out 也將在錯誤輸出的情況下創建;但是如果重定向stdout和stderr,則不能有任何輸出,因此不會創建該文件。但是 &> 語法不符合POSIX標準; Irshad Khan在本頁的其他地方給出的答案會更好。 - tripleee


在用戶定義的文件中附加輸出 您可以使用 >> 在nohup命令中。

nohup php your_command >> filename.out 2>&1 &

此命令將附加文件中的所有輸出,而不刪除舊數據。


4
2017-08-18 15:10



如果你想用POSIX覆蓋輸出文件 sh 語法,就是這麼簡單 nohup your_command >filename.out 2>&1 & - tripleee


還有更多方法 nohup 啟動一個進程,以便忽略SIGHUP;例如:(寫為shell函數)

nohup() {
    setsid "$@"
}

nohup() {
    ("$@" &)
}

nohup() {
    "$@" & disown
}

setsid, 甚至 (setsid "$@" &),可能是最好的選擇。)

所有這些都允許您指定自己的重定向 >2>,和 &>/>&


3
2018-02-14 15:48