有時(shí)候 我講解后臺(tái)提交任務(wù),一般都要講半個(gè)小時(shí),有時(shí)候講一百遍也不能要求所有人記住每個(gè)字眼,因此我寫下來這篇博文,希望更多的同行者可以復(fù)習(xí)并也可以通過博文來理解并解決你的困擾!
登錄你的服務(wù)器或mac的終端
任務(wù)投遞步驟
- 核查軟件是否安裝,能否--help
- 參數(shù)用法是否正確,查詢一下參數(shù)的具體含義,根據(jù)--help翻譯英文
- 檢查輸入文件路徑
- 核查輸出文件路徑
- 提交任務(wù),如有有報(bào)錯(cuò),解決報(bào)錯(cuò)在投遞任務(wù)
- 查看任務(wù)是否已經(jīng)在進(jìn)程上運(yùn)行著
- 查看結(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)行過程如圖:


任務(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)任務(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