linux下任務(wù)提交以及如何后臺(tái)運(yùn)行任務(wù)

有時(shí)候 我講解后臺(tái)提交任務(wù),一般都要講半個(gè)小時(shí),有時(shí)候講一百遍也不能要求所有人記住每個(gè)字眼,因此我寫下來這篇博文,希望更多的同行者可以復(fù)習(xí)并也可以通過博文來理解并解決你的困擾!

登錄你的服務(wù)器或mac的終端

任務(wù)投遞步驟

  1. 核查軟件是否安裝,能否--help
  2. 參數(shù)用法是否正確,查詢一下參數(shù)的具體含義,根據(jù)--help翻譯英文
  3. 檢查輸入文件路徑
  4. 核查輸出文件路徑
  5. 提交任務(wù),如有有報(bào)錯(cuò),解決報(bào)錯(cuò)在投遞任務(wù)
  6. 查看任務(wù)是否已經(jīng)在進(jìn)程上運(yùn)行著
  7. 查看結(jié)果路徑,是否運(yùn)行出內(nèi)容。有的命令不會(huì)那么快運(yùn)行出結(jié)果
    備注:很多事情,這個(gè)只是用來排除疑難雜癥的問題的,因?yàn)槟阌薪?jīng)驗(yàn)了后,就能看懂很多報(bào)錯(cuò),就能一下子想到出錯(cuò)地方,但是如果你初學(xué)的話,尤其第一次投遞一個(gè)軟件的任務(wù)時(shí),可以試試這種方法,他能幫你排除掉90%的報(bào)錯(cuò)問題~

任務(wù)直接提交

  • 這里不再贅述,conda安裝軟件sra-tools,請(qǐng)查看我的博文,故直接提交命令
  • 對(duì)于初學(xué)者,一般是這樣提交的,直接在登錄節(jié)點(diǎn)投遞任務(wù);
  • 但是對(duì)于一個(gè)集群,我們是不會(huì)在登錄節(jié)點(diǎn)投遞任務(wù)的,因?yàn)槲覀冇泻芏鄬iT跑任務(wù)的節(jié)點(diǎn)。
  • 那么如果你只能直接投遞任務(wù)了,下面就是一個(gè)簡(jiǎn)單的例子
source activate rna
prefetch SRR1039510 -O ~

2019-04-11T04:31:32 prefetch.2.9.1: 1) Downloading 'SRR1039510'...
2019-04-11T04:31:32 prefetch.2.9.1:  Downloading via fasp...
SRR1039510                                      
2019-04-11T04:42:43 prefetch.2.9.1:  fasp download succeed
2019-04-11T04:42:43 prefetch.2.9.1: 1) 'SRR1039510' was downloaded successfully

ls -lh  ~/*sra
-rw-r--r-- 1 qmcui qmcui 1.6G Nov 27  2013 /home/qmcui/SRR1039510.sra

任務(wù)的下載還是很快,11分鐘下載結(jié)束,但是這十一分鐘內(nèi)你什么事情都做不了。得重新開一個(gè)窗口。
運(yùn)行過程如圖:


下載過程

下載結(jié)果

任務(wù)提交后,只能等待任務(wù)的結(jié)束,你才能輸入命令,否則提交的任務(wù)還在運(yùn)行的時(shí)候,你發(fā)現(xiàn)你輸入什么都沒反應(yīng)。

重點(diǎn)是,這種情況下運(yùn)行的任務(wù)會(huì)因?yàn)槟憔W(wǎng)絡(luò)掉線、服務(wù)器掉線、xshell/終端關(guān)閉、電腦關(guān)閉等突發(fā)情況而任務(wù)被終止

因此我們希望任務(wù)運(yùn)行時(shí)被投遞出去,被投遞到后臺(tái)運(yùn)行,然后很開心的關(guān)電腦去睡覺

任務(wù)后臺(tái)提交

后臺(tái)任務(wù)通常用nohup ... &

source activate rna

nohup prefetch  SRR1039511 -O ~ &
# 按enter
# 后臺(tái)提交任務(wù)后,命令行就被立刻返回了
# 可以再做別的事情~

ps -ef|grep qmcui|grep prefetch
# 查看qmcui用戶提交的所有任務(wù)是ps -ef|grep qmcui

cat nohup.out 
后臺(tái)提交prefetch

后臺(tái)任務(wù)必須保存日志信息

但你把任務(wù)提交到后臺(tái)后,運(yùn)行的提示信息,如果你沒有保存、重定向的話,自然也就沒有啦。那么如果提交到后臺(tái)的任務(wù)報(bào)錯(cuò)了,你就需要報(bào)錯(cuò)信息,所以必須看到這樣的報(bào)錯(cuò)原因,才能準(zhǔn)確定向,到底哪里出問題啦,對(duì)吧!
因此捕獲報(bào)錯(cuò)信息很重要?。?!我們需要將后臺(tái)運(yùn)行任務(wù)的正確提示還是報(bào)錯(cuò)信息都要保存起來

所以上面的任務(wù)就會(huì)變形為:

prefetch  SRR1039510 -O ~ 1>SRR1039510.download.log 2>&1 &
prefetch  SRR1039511 -O ~ 1>SRR1039511.download.log 2>&1 &
prefetch  SRR1039512 -O ~ 1>SRR1039512.download.log 2>&1 &
prefetch  SRR1039513 -O ~ 1>SRR1039513.download.log 2>&1 &
prefetch  SRR1039514 -O ~ 1>SRR1039514.download.log 2>&1 &

大家嘗試運(yùn)行,并查看任務(wù)是否投遞成功,別忘了ps -ef|grep qmuci;匹配自己的用戶名即可哦!學(xué)習(xí):http://www.itdecent.cn/p/dee6db5afeff

循環(huán)提交任務(wù)

如果將任務(wù)循環(huán)起來呢,再來點(diǎn)難度!這里先準(zhǔn)備循環(huán)前的使用文件,這個(gè)文件的怎么準(zhǔn)備,是源于循環(huán)里你需要用什么數(shù)據(jù),文件里就準(zhǔn)備什么數(shù)據(jù),然后用管道符|傳遞給循環(huán)的代碼

# 生成一個(gè)如下的SRR_list.txt文件
echo SRR10395{10..14}|sed 's/ /\n/g' >SRR_Acc_List.txt

cat SRR_Acc_List.txt
SRR1039510
SRR1039511
SRR1039512
SRR1039513
SRR1039514

運(yùn)行示例:


# 理解循環(huán)結(jié)構(gòu)
# 這里我沒投遞,先寫了echo "即將投遞到服務(wù)器上的命令"
cat SRR_Acc_List.txt |while read id;do echo "prefetch  $id -O ~ 1>$id.download.log 2>&1";done
prefetch  SRR1039510 -O ~ 1>SRR1039510.download.log 2>&1
prefetch  SRR1039511 -O ~ 1>SRR1039511.download.log 2>&1
prefetch  SRR1039512 -O ~ 1>SRR1039512.download.log 2>&1
prefetch  SRR1039513 -O ~ 1>SRR1039513.download.log 2>&1
prefetch  SRR1039514 -O ~ 1>SRR1039514.download.log 2>&1
# 查看這些內(nèi)容是不是你要投遞的

# 循環(huán)投遞任務(wù):
cat SRR_Acc_List.txt |while read id;do prefetch  $id -O ~ 1>$id.download.log 2>&1;done

循環(huán)后臺(tái)提交任務(wù)

嘗試了前面循環(huán)提交任務(wù),那循環(huán)的任務(wù)怎么投遞后臺(tái)?

# 通過測(cè)試cat SRR_Acc_List.txt |while read id;do prefetch  $id -O ~ 1>$id.download.log 2>&1;done循環(huán)語句沒錯(cuò)
然后寫進(jìn)去一個(gè).sh文本

cat >prefetch.sh
cat SRR_Acc_List.txt |while read id;do prefetch  $id -O ~ 1>$id.download.log 2>&1;done

nohup bash prefetch.sh &
# 即把任務(wù)循環(huán)投遞到后臺(tái)~

寫在最后

雖然第一次學(xué)起來有點(diǎn)難度,其實(shí)每個(gè)人但凡需要學(xué)linux投遞任務(wù)的,這個(gè)知識(shí)點(diǎn)都是不可避免的,慢慢理解,反正不能躲避,就正面迎擊吧

敲重點(diǎn)

  • 其實(shí)把任務(wù)放在后臺(tái)最重要的符號(hào)是&。
  • 不要再循環(huán)的do代碼的后面里放入&,你會(huì)死很慘,慢慢你就理解啦。
  • 任務(wù)投遞出去,千萬不要以為就萬事大吉了,因?yàn)檫€有查看任務(wù)是不是真的投遞上了。
  • 等你學(xué)會(huì)后臺(tái)提交任務(wù),你就可以學(xué)習(xí)怎么寫流程了。
  • 1> 1.log 捕獲一種輸出,2> 2.log有捕獲一種輸出。如果想理解清楚,運(yùn)行下面代碼
find / -name '*gz'

find / -name '*gz' 2>~/error.txt

find / -name '*gz' 1>~/result.txt
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容