【Linux】伺服器後臺執行程式
筆記。
在Linux伺服器直接執行程式,程式執行的時間較長,程式經常會因為網路連線問題異常終止,一直盯著程式執行又費時費力,這時後臺執行程式是更好的解決方式。
But,如果伺服器重啟了,那所有程序都斷掉了,只能重新跑程式碼。
screen
假如遇到一些比較費時間的程式,但是又不能一直開著電腦觀察,這時可以使用screen。
1.如果在screenCRT中開啟視窗,然後執行一個程式,當登出時,程式會自動毀掉。
2.使用nohup可以解決此問題,把程式放到後臺執行,檢視nohup.out可以檢視程式執行的怎樣了,但是使用nohup把程式放到後臺,就再也無法切換程式到前臺了,而screen可以。
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 的意思是強制刪除
&
指在後臺執行。