一、運行.sh文件python
直接用./sh 文件就能夠運行,可是若是想後臺運行,即便關閉當前的終端也能夠運行的話,須要nohup命令和&命令。shell
(1)&命令服務器
功能:加在一個命令的最後,能夠把這個命令放在後臺執行
(2)nohup命令markdown
功能:不掛斷的運行命令
二、查看當先後臺運行的命令atom
有兩個命令能夠用,jobs和ps,區別是jobs用於查看當前終端後臺運行的任務,換了終端就看不到了。而ps命令用於查看瞬間進程的動態,能夠看到別的終端運行的後臺進程。spa
(1)jobs命令code
功能:查看當前終端後臺運行的任務 jobs -l選項可顯示當前終端全部任務的PID,jobs的狀態能夠是running,stopped,Terminated。+ 號表示當前任務,- 號表示後一個任務。
(2)ps命令server
功能:查看當前的全部進程 ps -aux | grep "test.sh" #a:顯示全部程序 u:以用戶爲主的格式來顯示 x:顯示全部程序,不以終端機來區分
三、關閉當先後臺運行的命令進程
kill命令:結束進程 (1)經過jobs命令查看jobnum,而後執行 kill %jobnum (2)經過ps命令查看進程號PID,而後執行 kill %PID 若是是前臺進程的話,直接執行 Ctrl+c 就能夠終止了
四、先後臺進程的切換與控制it
(1)fg命令 功能:將後臺中的命令調至前臺繼續運行 若是後臺中有多個命令,能夠先用jobs查看jobnun,而後用 fg %jobnum 將選中的命令調出。 (2)Ctrl + z 命令 功能:將一個正在前臺執行的命令放到後臺,而且處於暫停狀態 (3)bg命令 功能:將一個在後臺暫停的命令,變成在後臺繼續執行 若是後臺中有多個命令,能夠先用jobs查看jobnum,而後用 bg %jobnum 將選中的命令調出繼續執行。
五、運行Python示例
[root@xxxxx nlp]# nohup python -u jbabs.py > out.log 2>&1 & [1] 20087 [root@xxxxx nlp]# jobs [1]+ Running nohup python -u jbabs.py > out.log 2>&1 &
運行一個Python腳本,一般設置以下
$ python /data/python/server.py >python.log &
說明:
一、 > 表示把標準輸出(STDOUT)重定向到 那個文件,這裏重定向到了python.log
二、 & 表示在後臺執行腳本
這樣能夠到達目的,可是,咱們退出shell窗口的時候,必須用exit命令來退出,不然,退出以後,該進程也會隨着shell的消失而消失(退出、關閉)
一、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運行中卻查看不到輸出!
由於:
python的輸出有緩衝,致使python.log3並不可以立刻看到輸出。
使用-u參數,使得python不啓用緩衝。
kill -STOP 1234 將該進程暫停。
若是要讓它恢復到後臺,用 kill -CONT 1234 (不少在前臺運行的程序這樣是不行的)
若是要恢復到前臺,請在當時運行該進程的那個終端用jobs命令查詢暫停的進程。
而後用 fg 〔job號〕把進程恢復到前臺。
因此改正命令,就能夠正常使用了
$ nohup python3 -u test.py > out.log 2>&1 &在當前shell 裏查看後臺任務:jobs把後臺的任務拉到前臺運行: fg %任務號 默認任務1使用 crl + z 是任務暫停並掛載到後臺使用 bg %任務號 使任務在後臺運行