日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux后台运行python脚本

發布時間:2025/3/15 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux后台运行python脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

&符號

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

說明:

11是標準輸出(STDOUT)的文件描述符,2是標準錯誤(STDERR)的文件描述符1> python.log 簡化為 > python.log,表示把標準輸出重定向到python.log這個文件 22>&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不啟用緩沖。

所以改正命令,就可以正常使用了

$ nohup python -u test.py > out.log 2>&1 &

nohup和&的區別

  • & : 指在后臺運行
  • nohup : 不掛斷的運行,注意并沒有后臺運行的功能,,就是指,用nohup運行命令可以使命令永久的執行下去,和用戶終端沒有關系,例如我們斷開SSH連接都不會影響他的運行,注意了nohup沒有后臺運行的意思;&才是后臺運行
    &是指在后臺運行,但當用戶推出(掛起)的時候,命令自動也跟著退出

那么,我們可以巧妙的吧他們結合起來用就是

nohup COMMAND &

這樣就能使命令永久的在后臺執行

例如:

  • sh test.sh &
  • 將sh test.sh任務放到后臺 ,即使關閉xshell退出當前session依然繼續運行,但標準輸出和標準錯誤信息會丟失(缺少的日志的輸出)

    將sh test.sh任務放到后臺 ,關閉xshell,對應的任務也跟著停止。

  • nohup sh test.sh
  • 將sh test.sh任務放到后臺,關閉標準輸入,終端不再能夠接收任何輸入(標準輸入),重定向標準輸出和標準錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

  • nohup sh test.sh &
  • 將sh test.sh任務放到后臺,但是依然可以使用標準輸入,終端能夠接收任何輸入,重定向標準輸出和標準錯誤到當前目錄下的nohup.out文件,即使關閉xshell退出當前session依然繼續運行。

    任務前后臺的切換

    shell支持作用控制,有以下命令實現前后臺切換:

  • command &讓進程在后臺運行
  • jobs 查看后臺運行的進程
  • fg %n 讓后臺運行的進程n到前臺來
  • bg %n 讓進程n到后臺去
  • kill %n 殺死job
  • “n” 為jobs命令查看到的job編號,不是進程編號.
      fg、bg、jobs、&、ctrl + z 都是跟系統任務有關的

    一、&

    這個用在一個命令的最后,可以把這個命令放到后臺執行

    python test.py &

    二、ctrl + z

    可以將一個正在前臺執行的命令放到后臺,并且暫停

    三、jobs

    查看當前有多少在后臺運行的命令

    jobs [1]- Stopped vim ~/.bash_profile [2]+ Stopped vim /etc/profile

    四、fg

    將后臺中的命令調至前臺繼續運行
    如果后臺中有多個命令,可以用 fg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后臺正在執行的命令的序號(不是pid)。

    fg %1

    五、bg

    將一個在后臺暫停的命令,變成繼續執行
    如果后臺中有多個命令,可以用bg %jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后臺正在執行的命令的序號(不是pid)。

    bg %1 [1]+ vim ~/.bash_profile &[1]+ Stopped vim ~/.bash_profile

    六、kill

    殺死jobs中具體jobnumber

    jobs [1]+ Stopped vim ~/.bash_profile [2]- Stopped vim /etc/profile殺死 jobnumber=1: kill %1[1]+ Stopped vim ~/.bash_profile 在查詢下jobs: jobs [2]+ Stopped vim /etc/profile

    補充

    最近使用nohup創建了一個后臺進程,默認日志輸出到了nohup.out文件中,程序跑起來也就沒再管, 過了大約一周,發現硬盤空間不夠了,于是查找原因,發現這個nohup.out文件已經到了70G了,導致硬 盤空間不足了。
    解決方案 :

    只輸出錯誤信息到日志文件

    nohup ./program >/dev/null 2>log &

    什么信息也不要

    nohup ./program >/dev/null 2>&1 &

    文章轉自

    總結

    以上是生活随笔為你收集整理的linux后台运行python脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。