linux 下後臺運行python腳本

這兩天要在服務器端一直運行一個Python腳本,固然就想到了在命令後面加&符號

python

$ python /data/python/server.py >python.log &
說明:
     一、 > 表示把標準輸出(STDOUT)重定向到 那個文件,這裏重定向到了python.log
     二、 & 表示在後臺執行腳本
這樣能夠到達目的,可是,咱們退出shell窗口的時候,必須用exit命令來退出,不然,退出以後,該進程也會隨着shell的消失而消失(退出、關閉)

 

使用nohup(not hang up):

shell

$ nohup python /data/python/server.py > python.log3 2>&1 &
說明:
一、1是標準輸出(STDOUT)的文件描述符,2是標準錯誤(STDERR)的文件描述符
     1> python.log 簡化爲 > python.log,表示把標準輸出重定向到python.log這個文件
二、2>&1 表示把標準錯誤重定向到標準輸出,這裏&1表示標準輸出
     爲何須要將標準錯誤重定向到標準輸出的緣由,是由於標準錯誤沒有緩衝區,而STDOUT有。
     這就會致使  commond > python.log  2> python.log 文件python.log被兩次打開,而STDOUT和             STDERR將會競爭覆蓋,這確定不是我門想要的
三、好了,咱們如今能夠直接關閉shell窗口(我用的是SecureCRT,用的比較多的還有Xshell),而不用再輸入exit這個命令來退出shell了

$ ps aux|grep python
tomener 1885  0.1  0.4  13120  4528 pts/0    S    15:48   0:00 python /data/python/server.py
tomener 1887  0.0  0.0   5980   752 pts/0    S+   15:48   0:00 grep python

 

如今當咱們直接關閉shell窗口,再鏈接上服務器,查看Python的進程,發現進程還在服務器

 

可是,在python運行中卻查看不到輸出!server

由於:blog

python的輸出有緩衝,致使python.log3並不可以立刻看到輸出。進程

使用-u參數,使得python不啓用緩衝。it

因此改正命令,就能夠正常使用了class

$ nohup python -u test.py > out.log 2>&1 &
相關文章
相關標籤/搜索