Python後臺運行 -- nohup python xxx.py &

代碼示例

運行python程序 – my.py腳本

nohup python my.py >> my.log 2>&1 &
# 或者
nohup python my.py >> nohup.out 2>&1 &
# 或者
nohup python my.py &  # 這種寫法和上面第二種寫法等價

shell腳本類似 – tomcat.sh 並指定存放文件目錄

nohup tomcat.sh > /dev/null 2>&1 &  

nohup指令

  • nohup指不斷地運行,是no hang up的縮寫,指不間斷,不掛斷。運行一個進程的時候,不想讓其在你退出賬號時關閉,即可用nohup。

  • nohup在不規定的情況下,所以輸出內容會到nohup.out中

2>&1 錯誤內容重定向到標準輸出

  • 0 表示stdin標準輸入,用戶鍵盤輸入的內容
    1 表示stdout標準輸出,輸出到顯示屏的內容
    2 表示stderr標準錯誤,報錯內容
  • 2>&1 是一個整體,> 左右不能有空格,即將錯誤內容重定向輸入到標準輸出中去。

& 後臺運行

  • &爲後臺運行
  • 第一條代碼,以python環境不間斷的運行my.py這個腳本,並且將腳本輸出的內容重定向輸入my.log中(>>意爲追加,如果用>會讓其中的內容清空)
    nohup python my.py >> my.log 2>&1 &nohup python my.py 1 >> my.log 2>&1 & 相同,只是1(標準輸入)被省略了,而後面的my.log 2>&1 又將2(錯誤內容)輸入到標準輸出,然後前面的標準輸出又輸入到my.log中,意思錯誤和標準內容都會輸出到my.log中,其實代碼可拆成兩塊。即:
nohup python my.py >> my.log 2>&1 &
# 等價於下面兩行的內容
nohup python my.py 1>> my.log &
nohup python my.py 2>> my.log &
  • 上面代碼就是將錯誤和標準都輸出到my.log,最初的代碼只是簡化了。
    而加2>&1中的&是爲了區別文件1和1(標準輸出),假如爲2>1,那麼不就成了將錯誤內容輸出到文件1中。
  • nohup tomcat.sh > /dev/null 2>&1 & 也是一樣的,將錯誤和標準全部丟入/dev/null 中,全部銷燬。

若不指定輸出文件名,默認會在當前目錄生成nphup.out文件

可能存在的問題

生成了nohup.out文件,但是內容始終是空的。

原因

python的輸出又緩衝,導致nohup.out並不能夠馬上看到輸出。

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

nohup python -u my.py >> nohup.out 2>&1 &

Reference

https://blog.csdn.net/weixin_42840933/article/details/85780125
https://blog.csdn.net/qq_31821675/article/details/78246808

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章