nohup命令

    常常會運行相似這樣的命令nohup python main-script.py arg1 arg2 > log2.txt 2>&1 &python

nohup 命令運行由 Command參數和任何相關的 Arg參數指定的命令,忽略全部掛斷(SIGHUP)信號。spa

也就是說當你按下Ctrl+D從Linux註銷用戶之後,你的程序仍是能夠運行而不是隨着你的離開而結束。命令行

若是不指定輸出文件的位置,相似這樣:nohup python main-script.py arg1 arg2 & 那麼會在當前code

目錄下有一個nohup.out文件記錄log, 那麼> log2.txt 2>&1 & 是什麼意思呢。 > log2.txt是將輸出重定向到 log2.txt文件blog

2>&1 則是將標準錯誤(2)也定向到標準輸入(1)[標準輸入(0)就是從命令行輸入了]。ip

  不過常常會看到,一個程序運行了好久,卻沒有多少log出來,而是等到必定數量的內容生產後,log文件中才有內容。這是由於it

I/O緩衝區的問題。若是程序重定向到文件會在緩衝區滿了之後才寫入磁盤文件,好比如下的代碼not_flush.py:class

from time import sleep
# import sys
for i in range(100000):
  print i
  # sys.stdout.flush()
  sleep(1)

使用命令 python not_flush.py > log & 好久log裏也沒有內容,可是加上註釋之後 每一次循環都會寫入文件.import

另外,對於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) + "\n")
  sys.stdout.flush()
  sleep(2)

這樣每次循環log就有內容了,不用擔憂程序出錯之後 繼續運行了好久纔會發現了,由於Python這種動態語言一個變量名字寫錯了,到最後一個步驟你的程序仍是掛了。

相關文章
相關標籤/搜索