代碼示例
運行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