Logging

nohup 多個順序命令不記錄輸出

  • November 2, 2018

我有一個 python 腳本(它需要很長時間才能完成執行),我需要執行幾次以改變參數。它在遠端機器上執行。例如和測試目的,請使用以下腳本test.py

import time

print("\nStart time: {}".format(time.ctime()))
time.sleep(10)
print("End time: {}".format(time.ctime()))

為此,我通常使用nohup. 使用以下命令執行一次就可以了:

nohup test.py &

輸出正確保存在nohup.out文件中。為了按順序執行,我做了一些研究並發現

$$ this question $$$$ 1 $$我想出了以下命令:

nohup $(python test.py; python test.py) &

哪個工作正常。我執行命令,快速註銷並再次登錄,並看到htop第一個執行執行,然後完成,然後第二個開始。但問題是輸出沒有保存到nohup.out文件中。如果我在終端等待兩次執行完成,則會顯示以下錯誤:

nohup:無法執行命令“開始”:沒有這樣的文件或目錄

我在這裡做錯了什麼?

PS.: 我需要記錄輸出,因為我需要查看腳本的目前進度並知道如果它沒有正確完成會發生哪個錯誤。因此,如果有其他命令可以用來代替nohup可以記錄 pythonprint的命令,它也會受到歡迎。

$(...)先解決,然後才解決nohup。即,當您執行時nohup $(python test.py; python test.py) &,會發生以下情況:

  1. shell 執行$(...)返回字元串Start time ...,然後
  2. 執行nohup Start time ...顯然失敗,因為沒有這樣的命令Start

由於nohup只能執行一個命令,這是一種常見的解決方法:

~ $ nohup sh -c "python test.py; python test.py" &

所以你跑sh進去nohup,然後它執行你想要的命令。

引用自:https://serverfault.com/questions/938270