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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章