簡體   English   中英

Nohup 沒有將日志寫入輸出文件

[英]Nohup is not writing log to output file

我正在使用以下命令在后台運行 python 腳本:

nohup ./cmd.py > cmd.log &

但似乎 nohup 沒有向日志文件寫入任何內容。 cmd.log 已創建但始終為空。 在 python 腳本中,我使用sys.stdout.write而不是print來打印到標准輸出。 我做錯了什么嗎?

您可以使用-u標志運行 Python 以避免輸出緩沖:

nohup python -u ./cmd.py > cmd.log &

看起來您需要定期刷新標准輸出(例如sys.stdout.flush() )。 在我的測試中,即使使用print Python 也不會自動執行此操作,直到程序退出。

  • -unohup一起使用對我nohup 使用-u將強制stdoutstderr流無緩沖。 它不會影響標准輸入。 一切都將保存在“ nohup.out ”文件中。 像這樣-

     nohup python -u your_code.py &

    您也可以將其保存到您的目錄中。 這條路-

     nohup python -u your_code.py > your_directory/nohup.out &
  • 此外,您可以使用PYTHONUNBUFFERED 如果將其設置為非空字符串,它將與-u選項相同。 在運行 python 代碼之前使用這個運行下面的命令。

     export PYTHONUNBUFFERED=1

    要么

    export PYTHONUNBUFFERED=TRUE

PS-我會建議使用像 cron-job 這樣的工具在后台運行和計划執行。

export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

要么

nohup python -u ./cmd.py > cmd.log &

https://docs.python.org/2/using/cmdline.html#cmdoption-u

Python 3.3 及更高版本有一個用於打印的刷新參數,這是唯一對我有用的方法。

print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)

我有一個類似的問題,但與 Python 進程無關。 我正在運行一個執行 nohup 的腳本,並且該腳本通過 cron 定期運行。

我能夠通過以下方式解決問題:

  1. 重定向 stdin 、 stdout 和 stderr
  2. 確保通過 nohup 調用的腳本沒有在后台運行任何其他內容

PS:我的腳本是用在 RHEL 上運行的 ksh 編寫的

我按以下方式運行我的腳本,我完全沒有問題:

nohup python my_script.py &> my_script.out &

與您的語法相比,您輸入后似乎只缺少一個“&”符號...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM