這兩天要在服務器端一直運行一個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 &