Linux 后台運行python .sh等程序,以及查看和關閉后台運行程序操作


1、運行.sh文件

直接用./sh 文件就可以運行,但是如果想后台運行,即使關閉當前的終端也可以運行的話,需要nohup命令和&命令。

(1)&命令

      功能:加在一個命令的最后,可以把這個命令放在后台執行

(2)nohup命令

      功能:不掛斷的運行命令

2、查看當前后台運行的命令

有兩個命令可以用,jobs和ps,區別是jobs用於查看當前終端后台運行的任務,換了終端就看不到了。而ps命令用於查看瞬間進程的動態,可以看到別的終端運行的后台進程。

(1)jobs命令

    功能:查看當前終端后台運行的任務

   

   jobs -l選項可顯示當前終端所有任務的PID,jobs的狀態可以是running,stopped,Terminated。+ 號表示當前任務,- 號表示后一個任務。

 

(2)ps命令

      功能:查看當前的所有進程

      

     ps -aux | grep "test.sh"    #a:顯示所有程序  u:以用戶為主的格式來顯示   x:顯示所有程序,不以終端機來區分

 

3、關閉當前后台運行的命令

  kill命令:結束進程

 (1)通過jobs命令查看jobnum,然后執行   kill %jobnum

 (2)通過ps命令查看進程號PID,然后執行  kill %PID

   如果是前台進程的話,直接執行 Ctrl+c 就可以終止了

 

4、前后台進程的切換與控制

 (1)fg命令

   功能:將后台中的命令調至前台繼續運行

   如果后台中有多個命令,可以先用jobs查看jobnun,然后用 fg %jobnum 將選中的命令調出。

 (2)Ctrl + z 命令

   功能:將一個正在前台執行的命令放到后台,並且處於暫停狀態

 (3)bg命令

   功能:將一個在后台暫停的命令,變成在后台繼續執行

   如果后台中有多個命令,可以先用jobs查看jobnum,然后用 bg %jobnum 將選中的命令調出繼續執行。

 

5、運行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 &


說明:
1、 > 表示把標准輸出(STDOUT)重定向到 那個文件,這里重定向到了python.log
2、 & 表示在后台執行腳本
這樣可以到達目的,但是,我們退出shell窗口的時候,必須用exit命令來退出,否則,退出之后,該進程也會隨着shell的消失而消失(退出、關閉)

  • 使用nohup(not hang up):
    $ nohup python /data/python/server.py > python.log3 2>&1 &
  • 說明:


1、1是標准輸出(STDOUT)的文件描述符,2是標准錯誤(STDERR)的文件描述符
1> python.log 簡化為 > python.log,表示把標准輸出重定向到python.log這個文件

2、2>&1 表示把標准錯誤重定向到標准輸出,這里&1表示標准輸出 , 為什么需要將標准錯誤重定向到標准輸出的原因,是因為標准錯誤沒有緩沖區,而STDOUT有。 這就會導致 commond > python.log ,2> python.log 文件python.log被兩次打開,而STDOUT和 STDERR將會競爭覆蓋,這肯定不是我門想要的

3、好了,我們現在可以直接關閉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 crawl_spider.py > out.log 2>&1 &


在當前shell 里查看后台任務:jobs
把后台的任務拉到前台運行:
  fg %任務號 默認任務1
使用 crl + z 是任務暫停並掛載到后台
使用 bg %任務號 使任務在后台運行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM