nohup命令
經常會運行類似這樣的命令nohup python main-script.py arg1 arg2 > log2.txt 2>&1 &
nohup 命令運行由 Command參數和任何相關的 Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。
也就是說當你按下Ctrl+D從Linux注銷用戶以后,你的程序還是可以運行而不是隨著你的離開而結束。
如果不指定輸出文件的位置,類似這樣:nohup python main-script.py arg1 arg2 & 那么會在當前
目錄下有一個nohup.out文件記錄log, 那么> log2.txt 2>&1 & 是什么意思呢。 > log2.txt是將輸出重定向到 log2.txt文件
2>&1 則是將標準錯誤(2)也定向到標準輸入(1)[標準輸入(0)就是從命令行輸入了]。
不過經常會看到,一個程序運行了很久,卻沒有多少log出來,而是等到一定數量的內容生產后,log文件中才有內容。這是因為
I/O緩沖區的問題。如果程序重定向到文件會在緩沖區滿了以后才寫入磁盤文件,比如以下的代碼not_flush.py:
from time import sleep # import sys for i in range(100000): print i # sys.stdout.flush() sleep(1)
使用命令 pythonnot_flush.py > log & 很久log里也沒有內容,但是加上注釋以后 每一次循環都會寫入文件.
另外,對于Python2.X的print 和sys.stdout.write()好像還不一樣,如果希望盡快看到log,還是使用sys.stdout.write()+sys.stdout.flush()比較好.
比如:
from time import sleep import sys for i in range(100000): sys.stdout.write(str(i) + " ") sys.stdout.flush() sleep(2)
這樣每次循環log就有內容了,不用擔心程序出錯以后 繼續運行了很久才會發現了,因為Python這種動態語言一個變量名字寫錯了,到最后一個步驟你的程序還是掛了。
總結
                            
                        - 上一篇: 在Linux服务器上安装lxml
 - 下一篇: win10 字体渲染优化 色彩调整