1. 程式人生 > 其它 >【Linux】伺服器後臺執行程式

【Linux】伺服器後臺執行程式

筆記。

在Linux伺服器直接執行程式,程式執行的時間較長,程式經常會因為網路連線問題異常終止,一直盯著程式執行又費時費力,這時後臺執行程式是更好的解決方式。
But,如果伺服器重啟了,那所有程序都斷掉了,只能重新跑程式碼。

screen

假如遇到一些比較費時間的程式,但是又不能一直開著電腦觀察,這時可以使用screen。
1.如果在screenCRT中開啟視窗,然後執行一個程式,當登出時,程式會自動毀掉。
2.使用nohup可以解決此問題,把程式放到後臺執行,檢視nohup.out可以檢視程式執行的怎樣了,但是使用nohup把程式放到後臺,就再也無法切換程式到前臺了,而screen可以。

Linux screen命令
Linux中的screen命令使用詳解
Screen掛起對Linux伺服器的遠端連線

Screen,就可以理解成Linux下的會話保持軟體。
Screen被稱之為一個全屏視窗管理器,可以輕鬆在一個物理終端上獲得多個虛擬終端的效果。

  • 伺服器終端輸入:screen 新建視窗,之後可以輸入執行命令
  • screen -S 會話名 同上,並且取名,方便管理
  • ctrl-a d 先同時按ctrl+a,再按d,顯示[detached],回到主會話
  • screen -ls檢視當前回話和id
  • screen -r 會話名/會話id 返回某個screen會話
  • screen -S id -X quit
    刪除會話 [還未嘗試]
  • screen終端輸入exit,徹底退出,螢幕顯示[screen is terminating]即可

nohup

nohup 詳解 - 今孝 - 部落格園 (cnblogs.com)
nohup和&後臺執行,程序檢視及終止 - 慕塵 - 部落格園 (cnblogs.com)

nohup指不斷地執行,是no hang up的縮寫,指不間斷,不掛斷。

示例

nohup python test.py > tmp.log 2>&1 &

命令解析

用途:LINUX命令用法,不掛斷地執行命令。
語法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令執行由 Command 引數和任何相關的 Arg 引數指定的命令,忽略所有結束通話(SIGHUP)訊號。在登出後使用 nohup 命令執行後臺中的程式。要執行後臺中的 nohup 命令,新增 & ( 表示“and”的符號)到命令的尾部。

進入要執行的py檔案目錄下:
nohup python -u test.py > test.log 2>&1 &

  • nohup 不掛起的意思 python test.py python執行test.py檔案
  • -u 代表程式不啟用快取,也就是把輸出直接放到log中,沒這個引數的話,log檔案的生成會有延遲
  • > test.log 將輸出日誌儲存到這個log中
  • 2>1 2與>結合代表錯誤重定向,而1則代表錯誤重定向到一個檔案1,而不代表標準輸出; 2>&1 換成2>&1,&與1結合就代表標準輸出了,就變成錯誤重定向到標準輸出.
  • & 最後一個& ,代表該命令在後臺執行

命令執行後會有提示,示例:
[1] 2880
代表程序2880中執行。

檢視nohub命令下執行的所有後臺程序:
jobs
jobs -l

檢視後臺執行的所有程序:
ps -aux
檢視後臺執行的所有python 程序:
ps aux |grep python
或者
ps -ef | grep python

刪除程序
kill -9 程序id
-9 的意思是強制刪除

&

指在後臺執行。