1. 程式人生 > >Linux小技巧:後臺提交任務與日誌儲存

Linux小技巧:後臺提交任務與日誌儲存

前言:先說說自己的情況,從18年9月開始,整個工作環境和生產工具發生了很大的變化,之前工作大部分時間用的是Windows做開發和少數Linux,現在要全部使用mac和公私有云的Linux環境,這種情況下對自己的做事方式、技術要求、技術棧和使用工具都發生了變化。由於之前在Linux上面的積累很少,所以又要開啟一段學習之路啦!

今天,我重點要介紹的是Linux後臺任務提交的幾種常用方式推薦。

為什麼需要後臺提交任務呢?我們設想一下,如果你的終端mac連線了Linux伺服器,你恰好在提交一個hadoop或者spark任務,或者你在訓練一個機器學習或者深度學習模型,但是突然你要離開一下,中途你的mac鎖屏或者斷網了,那任務是不是就中斷了呢?回來之後,你以為任務結束了,結果發現,任務被意外中斷了,好吧,從頭開始。

遇到這種情況是不是很不爽啊,當然,如果你的任務很小,很快執行完還好,但是遇到大型任務,連續幾個小時甚至更長,你總不能一直守在電腦前面吧,只有傻子才這麼幹,哈哈!!!

為了避免上述情況發生和解放自己的雙手,下面,我來介紹幾個我最近使用的Linux任務後臺提交工具:

1.&

這是一個很簡單的操作,在命名後面使用&,指定命令後臺執行:例如:

sh test.sh & 

不過,任務在後臺執行會將結果輸出到螢幕上,可能會干擾你的工作,如過螢幕內容太多,應該儲存下來,有利於錯誤排查。最好使用下面的方法把它的輸出重定向到某個檔案中:

sh test.sh >  out.file  2>&1  & 

這樣,我們把螢幕輸出重定向到一個叫out.file的檔案中。

當你成功地提交程序以後,就會顯示出一個程序號,可以用它來監控該程序,或殺死它。

檢視後臺程序:jobs -l

或者:ps -ef | grep 程序號

殺掉程序: kill -9 程序號

2.nohup

使用&命令後,作業被提交到後臺執行,當前控制檯沒有被佔用,但是一但把當前控制檯關掉(退出帳戶時),作業就會停止執行。nohup命令可以在你退出帳戶之後繼續執行相應的程序。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:

nohup command &

同樣,我們把列印資訊重定向到檔案:

nohup command > myout.file 2>&1 &

使用nohup命令後,如果任務結果或者需要殺掉,可以使用如下方法:

ctrl + z  可以將一個正在前臺執行的命令放到後臺,並且處於暫停狀態。

ctrl+c  終止前臺命令。
 
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的程序標識。

3.tmux

Tmux是一個優秀的終端複用軟體,類似GNU Screen,但來自於OpenBSD,採用BSD授權。使用它最直觀的好處就是,通過一個終端登入遠端主機並執行tmux後,在其中可以開啟多個控制檯而無需再“浪費”多餘的終端來連線這臺遠端主機。是BSD實現的Screen替代品,相對於Screen,它更加先進:支援螢幕切分,而且具備豐富的命令列引數,使其可以靈活、動態的進行各種佈局和操作。

tmux需要安裝,mac安裝方式:

安裝 Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 
安裝tmux
$ brew install tmux

安裝完成之後:

1. tmux new -s session1 新建會話

使用 tmux new -s 命令新建一個會話 -s (其實是session的頭字母)。後面指定會話名即可。執行之後會從shell的終端環境進入到會話環境中,並停留在剛才新建的會話中。

2. ctrl+b d 退出會話,回到shell的終端環境

我們剛才是通過 tmux new -s 命令建立一個tmux會話並進入該會話的,如果要退出這個會話環境回到終端環境(會話裡面的程式不會退出在後臺保持繼續執行)。應該如何操作呢,例如上圖,當前我們在tmux的會話環境中,使用一個快捷鍵 ctrl+b d (按ctrl+b 之後再按一個字母d即可,字母d是detach的縮寫)。

3. tmux ls 終端環境檢視會話列表

在終端環境中,我們可以通過tmux ls 命令來檢視後臺執行中的tmux的會話列表。

4. tmux a -t session1 從終端環境進入會話

如果在終端環境中執行 tmux ls 檢視有tmux會話正在後臺執行,如何進入到該正在後臺中執行的會話呢,通過執行 tmux a -t session1 即可進入到該已存在的會話 session1 中。其中a字母是attach的頭字母,表示附加, -t 指定要進入已存在的會話名,如果不存在則會報告 session not found 錯誤。

5. tmux kill-session -t session1 銷燬會話

我們可以在終端環境和會話環境中銷燬會話,例如在終端環境中執行 tmux kill-session -t session1 結束名字為session1的tmux會話。

在會話環境中執行 ctrl+b : (注意按組合鍵之後再按一個冒號鍵),狀態列變成黃色之後提示我們可以在會話環境中輸入命令,此時輸入 kill-session -t session1 回車即可。其中session1是要銷燬的會話名。

到此為止,tmux的基本使用使用方式就是這樣,比如你建立了一個tmux視窗,現在任務還在執行,你要回家了,沒關係,輕輕合上你的電腦,回到家登入終端,tmux a -t session1重新進入,你還可以看到你的任務。

下面介紹幾個酷炫的操作:

1.上下分屏:ctrl + b 再按 " ;

2.左右分屏:ctrl + b 再按 % ;

3.切換螢幕:ctrl + b 再按o ;

4.關閉一個終端:ctrl + b 再按x;

5.上下分屏與左右分屏切換: ctrl + b 再按空格鍵

好了,今天就介紹這3個最常用的工具,這3種工具已經完全可以勝任你的工作中了。

使用建議:

1.如果是小的任務和命令,推薦使用nohup和&;

2.如果是跑資料或者訓練模型,首選tmux,我覺得很不錯。

tmux推薦閱讀這篇:http://www.cnblogs.com/kevingrace/p/6496899.html